UIViewController的生命周期

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




二: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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容