既然要研究UIViewController的生命周期, 先寫一段代碼, 我們從代碼的執行順序來了解UIViewController的生命周期
首先 要知道一個UIViewController中都會執行那些方法
1. - (void)loadView
2. - (void)viewDidLoad
3. - (void)viewWillAppear:(BOOL)animated
4. - (void)viewDidAppear:(BOOL)animated
5. - (void)viewWillDisappear:(BOOL)animated
6. - (void)viewDidDisappear:(BOOL)animated
在一段程序執行過程中 按以上順序依次執行
下面 我們書寫代碼 運行程序 來看看 首先創建一個 ViewController
- (void)loadView {
[super loadView];
NSLog(@"%@------%s",[self class], FUNCTION);
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSLog(@"%@------%s",[self class], __FUNCTION__);
self.view.backgroundColor = [UIColor redColor];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(barClick:)];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"%@------%s",[self class], __FUNCTION__);
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%@------%s",[self class], __FUNCTION__);
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"%@------%s",[self class], __FUNCTION__);
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"%@------%s",[self class], __FUNCTION__);
}
由圖可知程序的運行順序是:
loadView
viewDidLoad
viewWillAppear
-
viewDidAppear
這是只有一個頁面的情況 如果在這個頁面上放一個button push到下一個頁面 這是程序執行順序又會是怎么樣的呢
下面讓我們再看看程序的運行結果- (void)loadView { [super loadView]; NSLog(@"%@------%s",[self class], __FUNCTION__); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"%@------%s",[self class], __FUNCTION__); self.view.backgroundColor = [UIColor redColor]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(barClick:)]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; NSLog(@"%@------%s",[self class], __FUNCTION__); } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; NSLog(@"%@------%s",[self class], __FUNCTION__); } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; NSLog(@"%@------%s",[self class], __FUNCTION__); } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; NSLog(@"%@------%s",[self class], __FUNCTION__); } #pragma mark - buttonClick - (void)barClick:(UIBarButtonItem *)button { FirstViewController *VC = [[FirstViewController alloc] init]; [self.navigationController pushViewController:VC animated:YES]; } - (void)loadView { [super loadView]; NSLog(@"%@------%s",[self class], __FUNCTION__); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.
NSLog(@"%@------%s",[self class], FUNCTION);
self.view.backgroundColor = [UIColor greenColor];}
// 視圖將要出現時就會調用
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"%@------%s",[self class], FUNCTION);
}
// 視圖完全出現時就會調用 - (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%@------%s",[self class], FUNCTION);
}
// 視圖將要消失會調用 - (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"%@------%s",[self class], FUNCTION);
}
// 視圖完全消失會調用 - (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"%@------%s",[self class], FUNCTION);
}
- (void)viewWillAppear:(BOOL)animated {
在ViewController頁面中有一個button 點擊button可以push到FirstViewController 由程序運行結果可知: 當剛運行程序時按順序依次執行:
- loadView
- viewDidLoad
- viewWillAppear
- viewDidAppear
- viewWillDisappear
- FirstViewController loadView
- FirstViewController viewDidLoad
- FirstViewController viewWillAppear
- viewController viewDidDisappear
- FirstViewController viewDidappear
當再一次點擊左上角的返回鍵時 從FirstViewController跳轉到viewController 由程序的運行結果可知 程序的運行順序為;
- loadView
- viewDidLoad
- viewWillAppear
- viewDidAppear
- viewWillDisappear
- FirstViewController loadView
- FirstViewController viewDidLoad
- FirstViewController viewWillAppear
- viewController viewDidDisappear
- FirstViewController viewDidappear
- FirstViewController viewWillDisappear
- viewController viewWillAppear
- FirstViewController viewWillDisappear
-
viewController viewDidAppear
8037D62C-4A2C-4CB3-9289-D705418B2839.png
從程序的執行順序可以看出來每個viewController只執行一次loadView和viewDidLoad