ViewController是iOS开发中非常重要的一部分,通常把它分为两种了类别,一种用来显示内容,如:UIViewController,还有一种主要用来管理视图控制器,如:UINavigationController, UITabBarController。接下来通过一个简单的工程来了解ViewController的生命周期。
// 加载视图
- (void)loadView {
[super loadView];
NSLog(@"ViewController加载视图%s", __FUNCTION__);
}
// 视图完成加载
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(barButtonClicked:)];
NSLog(@"ViewController视图完成加载%s", __FUNCTION__);
}
// 视图将要出现时, 就会调用(只有一部分出现就会触发)
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"ViewController视图将要出现%s", __FUNCTION__);
}
// 视图完全出现时, 就会调用
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"ViewController视图完全出现%s", __FUNCTION__);
}
// 视图将要消失时, 就会调用(只有一部分消失就会触发)
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"ViewController视图将要消失%s", __FUNCTION__);
}
// 视图完全消失, 就会调用
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"ViewController视图完全消失%s", __FUNCTION__);
}
- 在每一个方法中进行了打印,运行后结果如下
- 通过点击导航的左按钮,push到FirstViewController,同时在FirstViewController也重写这些方法并打印.
从打印结果可以发现, FirstViewController的loadView viewDidLoad与viewWillAppear:方法在ViewController的viewWillDisappear:与viewDidDisappear:之间执行。
- 之后从FirstViewController pop回到ViewController,可以看到FirstViewController的viewWillDisappear:与ViewController的viewWillAppear方法同时执行, viewDidDisappear:与viewDidAppear:同时执行
- 如果对ViewController的生命周期还不够清楚, 可以在工程中重写这些方法并打印内容,便能加深印象。