一:首先了解一下生命周期圖

二:UIViewController 生命周期介紹
??????? 1.通過alloc init 分配內(nèi)存,初始化controller;
? ? ? ? 2.loadView,???? loadView方法默認實現(xiàn)[super loadView];? 如果在初始化controller時指定了xib文件名,就會根據(jù)傳入的xib文件名加載對應的xib文件,如果沒傳xib文件名,默認會加載跟controller同名的xib文件,如果沒找到相關(guān)聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView,然后賦給controller的view;
? ? ? ?? 3.viewDidLoad,?? 當loadView創(chuàng)建完view之后,此時view已經(jīng)完成加載了,會調(diào)用viewDidLoad方法;一般我會在這里做界面上的初始化操作,比如添加按鈕,子視圖,等等;
??????? 4.viewWillAppear,???? 當view在load完之后,將要顯示在屏幕之前會調(diào)用這個方法,? 在重寫這些方法時候最好先調(diào)用一下系統(tǒng)的方法之后在做操作;
??????? 5.viewDidAppear ,? 當view已經(jīng)在屏幕上顯示出來之后,會調(diào)用這個方法;
? ? ? ? 6.viewWillDisappear, 當view視圖將要從屏幕上移除時候調(diào)用;
??????? 7.viewDidDisappear,? 當視圖已經(jīng)從屏幕上移除時候調(diào)用;
??????? 8.dealloc,? view被銷毀時候調(diào)用,如果是手動管理內(nèi)存的話,需要釋放掉之前在init和viewDidLoad中分配的內(nèi)存(類似alloc,new,copy);dealloc方法不能由我們主動調(diào)用,必須等引用計數(shù)為0時候由系統(tǒng)調(diào)用.
??????? 注意:viewDidUnload 在6.0之后已經(jīng)廢棄了。簡單來說,對于iOS6,你不需要做任何以前viewDidUnload的事情,更不需要把以前viewDidUnload的代碼移動到 didReceiveMemoryWarning方法中
三:UIViewController 生命周期實例
????????? 首先創(chuàng)建一個 ViewController,并這個頁面上放一個button push到下一個頁面;查看它的生命周期執(zhí)行順序
????????? ViewController.m中的代碼:
????? - (void)loadView {
????????? ? [super loadView];
??????????? NSLog(@"%@------%s",[self class], __FUNCTION__);
?????? }
????? - (void)viewDidLoad {
?????? ? ? [super viewDidLoad];
???? ? ? ? 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__);
?}
#pragmamark - buttonClick
- (void)barClick:(UIBarButtonItem *)button {
?????? SecondViewController *VC = [[FirstViewController? alloc] init];
?????? [self.navigationController? pushViewController:VC animated:YES];
}
第二個控制器SecondViewController.m 代碼
- (void)loadView {? ?
?????????? [super loadView];? ?
??????????? NSLog(@"%@------%s",[selfclass], __FUNCTION__);?
? }??
- (void)viewDidLoad {
? ? ? ? ? ?? [super viewDidLoad];
???????????? NSLog(@"%@------%s",[self class], __FUNCTION__);
???????????? self.view.backgroundColor = [UIColor greenColor];
? }
// 視圖將要出現(xiàn)時就會調(diào)用
- (void)viewWillAppear:(BOOL)animated {
??????????? [super viewWillAppear:animated];
??????????? NSLog(@"%@------%s",[self? class], __FUNCTION__);
?}
// 視圖完全出現(xiàn)時就會調(diào)用
- (void)viewDidAppear:(BOOL)animated {
??????????? [super viewDidAppear:animated];
?????????? NSLog(@"%@------%s",[self class], __FUNCTION__);
}
// 視圖將要消失會調(diào)用
- (void)viewWillDisappear:(BOOL)animated {
?????????? [super viewWillDisappear:animated];
?????????? NSLog(@"%@------%s",[self class], __FUNCTION__);
}
// 視圖完全消失會調(diào)用
- (void)viewDidDisappear:(BOOL)animated {
?????? ? ? [super viewDidDisappear:animated];
???????? ?? NSLog(@"%@------%s",[self class], __FUNCTION__);
}
在ViewController頁面中有一個button 點擊button可以push到SecondViewController 由程序運行結(jié)果可知: 當剛運行程序時按順序依次執(zhí)行:
1. viewController? loadView
2. viewController? viewDidLoad
3. viewController? viewWillAppear
4. viewController? viewDidAppear
5. viewController viewWillDisappear
6. SecondViewController loadView
7. SecondViewController viewDidLoad
8. SecondViewController viewWillAppear
9. viewController viewDidDisappear
10. SecondViewController viewDidappear