關于UIViewController的聲明周期
源于一次在使用時發現有個property初始化賦值后其輸出還是nil
UIViewController的生命周期簡單來說主要調用了以下幾個方法(通過代碼創建)
1.alloc :分配空間 (類方法)
2.init :創建實例
3.loadView
4.viewDidLoad
5.viewWillAppear
6.viewDidAppear
7.viewWillDisappear
8.viewDidDisappear
有個需要注意的是init和viewDidLoad,就是這樣的一個push到新controller的過程
UIbuttonClick_2.gif
我在各方法添加了個NSLog,對于單個控制器這樣的一個操作就是下面這樣的一個流程
屏幕快照 2016-02-01 20.09.20.png
打上斷點可以發現雖然是先跑的init,但是因為有 self = [super init] 這一行代碼,會導致我們先走父類的方法(父類又會去根據子類的重寫去跑子類的方法)因此就導致 NSLog(@"First_init");這一行代碼的執行是會在viewDidLoad后才執行的。
- (instancetype)init
{
self = [super init];
if (self) {
self.title = @"第一個控制器";
NSLog(@"First_init");
}
return self;
}
所以對于viewController內的屬性初始化要放在適當的位置,避免出現未初始化就使用的情況
如果沒走 下面這一行的話,就是按照這樣的順序的
self = [super init]
屏幕快照 2016-02-01 19.51.50.png