@Nickロックウッドは優れた情報を提供していますが、覚えておくべきいくつかのより多くのものがあります。
まず、ビューコントローラがnibファイルまたはストーリーボードからインスタンス化されている場合、initWithNibName:bundle:
は呼び出されません。その場合は、initWithCoder:
とawakeFromNib
が代わりに呼び出されます。このような状況はiOSではやや珍しいものでしたが、ストーリーボードを追加すると、ビューコントローラがinitWithNibName:bundle:
をバイパスするのがはるかに一般的になりました。
私は別の方法(私は私setup
を呼び出す)とinitWithNibName:bundle:
とawakeFromNib
の両方からそれを呼び出す非UIの初期化コードを置くことをお勧めします。しかし、初期化が一度だけ実行されることが重要な場合にのみこれを実行します。それ以外の場合は、私はそれをviewWillAppear:
に入れて、できるだけレイジーロードにしてください。
第2に、self.view
をinit...
またはawakeFromNib
に記載するものは実行しないでください。 は、viewDidLoad
が呼び出されるまで決して参照するべきではありません。そうしないと、nibファイルが必要以上に早くロードされます。 UI関連のものは、ビューの設定に関連する場合はviewDidLoad
、ビューの設定(つまりデータを読み込む場合)の場合はviewWillAppear:
になります。
だから私は通常、これらの事を設定する方法:コメントを
@implementation
- (void)setup {
// Non-UI initialization goes here. It will only ever be called once.
}
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle {
if ((self = [super initWithNibName:nibName bundle:bundle])) {
[self setup];
}
return self;
}
- (void)awakeFromNib {
[self setup];
}
- (void)viewDidLoad {
// Any UI-related configuration goes here. It may be called multiple times,
// but each time it is called, `self.view` will be freshly loaded from the nib
// file.
}
- (void)viewDidUnload {
[super viewDidUnload];
// Set all IBOutlets to `nil` here.
// Drop any lazy-load data that you didn't drop in viewWillDisappear:
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Most data loading should go here to make sure the view matches the model
// every time it's put on the screen. This is also a good place to observe
// notifications and KVO, and to setup timers.
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Unregister from notifications and KVO here (balancing viewWillAppear:).
// Stop timers.
// This is a good place to tidy things up, free memory, save things to
// the model, etc.
}
- (void)dealloc {
// standard release stuff if non-ARC
[[NSNotificationCenter defaultCenter] removeObvserver:self]; // If you observed anything
// Stop timers.
// Don't unregister KVO here. Observe and remove KVO in viewWill(Dis)appear.
}
@end
感謝を。 – Stanley
コメントが正しくありません。最初の時刻だけでなく、ビューコントローラのビューが読み込まれるたびに呼び出されます。 –
訂正ありがとう... – Stanley