initWithCoder:(NSCoder *)aDecoder:
加載xib胶坠,storyboard钙态,純代碼用不到
loadView:
加載view
viewDidLoad:
view加載完畢
viewWillAppear:
控制器的view將要顯示
viewWillLayoutSubviews:
控制器的view將要布局子控件
viewDidLayoutSubviews:
控制器的view布局子控件完成
這期間系統(tǒng)可能會多次調(diào)用viewWillLayoutSubviews
、 viewDidLayoutSubviews
倆個方法
viewDidAppear:
控制器的view完全顯示
viewWillDisappear:
控制器的view即將消失的時候
這期間系統(tǒng)也會調(diào)用viewWillLayoutSubviews
、viewDidLayoutSubviews
兩個方法
viewDidDisappear:
控制器的view完全消失的時候
didReceiveMemoryWarning
當(dāng)app收到內(nèi)存警告的時候會發(fā)消息給視圖控制器。
viewWillUnload:
(iOS6廢除)
viewDidUnload:
(iOS6廢除)
總結(jié):
整個控制器聲明周期:
viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
Demo
控制器1:(跳轉(zhuǎn)到控制器2代碼類似)
@interface ViewController ()
@property (nonatomic, assign)NSInteger count;
@end
@implementation ViewController
- (instancetype)init {
self = [super init];
if (self) {
self.count = 0;
}
return self;
}
- (void)loadView {
[super loadView];
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
self.count++;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
self.count ++;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.count++;
NSLog(@"ViewController%s------%ld", __func__, (long)self.count);
}
- (IBAction)buttonClick:(id)sender {
Test1ViewController *test = [[Test1ViewController alloc] init];
[self.navigationController pushViewController:test animated:YES];
}
打印結(jié)果:
-
push的時候生命周期:
image.png -
pop的時候生命周期:
image.png
參考文章:
http://www.reibang.com/p/42eb5a930d66
http://www.cocoachina.com/cms/wap.php?action=article&id=23326
iOS系統(tǒng)中導(dǎo)航欄的轉(zhuǎn)場解決方案與最佳實踐