2

重複の可能性:
[super viewDidLoad] 規則

UIViewController[super viewDidLoad]内に置く場所に違いはありますか? viewDidLoadつまり、メソッドの最初 (UIViewController をセットアップするコードの前) または最後 (UIViewController をセットアップするコードの後) に配置する必要がありますか、それとも違いはありませんか?

4

4 に答える 4

7

通常、できるだけ早く super を呼び出す必要があります。そうしないと、スーパークラスが独自の実装に干渉する可能性があります。UIViewControllerでデフォルトの背景色を設定するとしましょうviewDidLoad(そうではありません): メソッドで独自の背景色を設定してから super を呼び出すと、デフォルトの色にリセットされて混乱を招く可能性があります。

于 2011-05-17T16:06:11.840 に答える
3

そのとおり。

//superclass
-(void)viewDidLoad {
    self.ivar = 4;
}

//subclass
-(void)viewDidLoad {
    [super viewDidLoad];
    self.ivar = 5;
}

//alternative subclass
-(void)viewDidLoad {
    self.ivar = 5;
    [super viewDidLoad];
}

この例は簡単ですが、同じスーパークラスから継承する 2 つのサブクラスを示しています。1 つはロード後に ivar を 4 に設定し、もう 1 つは ivar を 5 に設定します。

私は上記の idz の言葉に固執し、常に最初に [super viewDidLoad] を呼び出すようにしています。また、[super dealloc] を呼び出す前にすべての解放を dealloc で行います。つまり、最初にすべての混乱を取り除きます。そうしないと、リーク時間になります。

于 2011-05-17T16:08:21.180 に答える
2

それが行うことをすべてオーバーライドできるように、最初に配置する必要があります(最初にオーバーライドするのは、それに直面できるからです)。または、別の見方をすると、何かを元に戻す場合に備えて、コードの後に​​置くべきではありません。これがあなたにとって理にかなっていることを願っています!

于 2011-05-17T16:05:04.387 に答える
0

ドキュメントは実際にそれが必要であることを示しておらず、Apple のサンプル コード プロジェクトのいくつか (iPhoneCoreDataRecipes など) はまったく呼び出しません[ super viewDidLoad ]-viewWillAppear:これを、次のように明確に述べている のドキュメントと比較してください。

このメソッドをオーバーライドする場合は、実装のある時点で super を呼び出す必要があります。

とは言え、呼んでも問題ありません。私の習慣は、すぐにそれを呼び出してから、ビューのセットアップを続行することです。

于 2011-05-17T16:08:58.160 に答える