重複の可能性:
[super viewDidLoad] 規則
UIViewController[super viewDidLoad]
内に置く場所に違いはありますか? viewDidLoad
つまり、メソッドの最初 (UIViewController をセットアップするコードの前) または最後 (UIViewController をセットアップするコードの後) に配置する必要がありますか、それとも違いはありませんか?
重複の可能性:
[super viewDidLoad] 規則
UIViewController[super viewDidLoad]
内に置く場所に違いはありますか? viewDidLoad
つまり、メソッドの最初 (UIViewController をセットアップするコードの前) または最後 (UIViewController をセットアップするコードの後) に配置する必要がありますか、それとも違いはありませんか?
通常、できるだけ早く super を呼び出す必要があります。そうしないと、スーパークラスが独自の実装に干渉する可能性があります。UIViewController
でデフォルトの背景色を設定するとしましょうviewDidLoad
(そうではありません): メソッドで独自の背景色を設定してから super を呼び出すと、デフォルトの色にリセットされて混乱を招く可能性があります。
そのとおり。
//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 で行います。つまり、最初にすべての混乱を取り除きます。そうしないと、リーク時間になります。
それが行うことをすべてオーバーライドできるように、最初に配置する必要があります(最初にオーバーライドするのは、それに直面できるからです)。または、別の見方をすると、何かを元に戻す場合に備えて、コードの後に置くべきではありません。これがあなたにとって理にかなっていることを願っています!
ドキュメントは実際にそれが必要であることを示しておらず、Apple のサンプル コード プロジェクトのいくつか (iPhoneCoreDataRecipes など) はまったく呼び出しません[ super viewDidLoad ]
。-viewWillAppear:
これを、次のように明確に述べている のドキュメントと比較してください。
このメソッドをオーバーライドする場合は、実装のある時点で super を呼び出す必要があります。
とは言え、呼んでも問題ありません。私の習慣は、すぐにそれを呼び出してから、ビューのセットアップを続行することです。