一、 ARC環(huán)境
單個viewController的生命周期
initWithCoder:(NSCoder *)aDecoder:(如果使用storyboard或者xib)
loadView:加載view
viewDidLoad:view加載完畢
viewWillAppear:控制器的view將要顯示
viewWillLayoutSubviews:控制器的view將要布局子控件
viewDidLayoutSubviews:控制器的view布局子控件完成
這期間系統(tǒng)可能會多次調用viewWillLayoutSubviews 、 viewDidLayoutSubviews 倆個方法
viewDidAppear:控制器的view完全顯示
viewWillDisappear:控制器的view即將消失的時候
這期間系統(tǒng)也會調用viewWillLayoutSubviews 、viewDidLayoutSubviews 兩個方法
viewDidDisappear:控制器的view完全消失的時候
多個viewControllers跳轉
當我們點擊push的時候首先會加載下一個界面然后才會調用界面的消失方法
initWithCoder:(NSCoder *)aDecoder:ViewController2(如果用xib創(chuàng)建的情況下)
loadView:ViewController2
viewDidLoad:ViewController2
viewWillDisappear:ViewController1將要消失
viewWillAppear:ViewController2將要出現
viewWillLayoutSubviewsViewController2
viewDidLayoutSubviewsViewController2
viewWillLayoutSubviews:ViewController1
viewDidLayoutSubviews:ViewController1
viewDidDisappear:ViewController1完全消失
viewDidAppear:ViewController2完全出現
小結:
-整個控制器生命周期: viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
二、非ARC環(huán)境下
didReceiveMemoryWarning:
當app收到內存警告的時候會發(fā)消息給視圖控制器。
app從來不會直接調用這個方法,而是當系統(tǒng)確定可用內存不足的時候采取調用。
如果你想覆寫這個方法來釋放一些控制器使用的額外內存,你應該在你的實現方法中調用父類的實現方法。
viewWillUnload:(iOS6廢除)
當消除掉控制器的視圖之前調用
視圖不會再在低內存條件下被清除所以這個方法不會再被調用。
在iOS5之前,當低的內存情況發(fā)生的時候,當前控制器的視圖們不再被需要的時候,系統(tǒng)會有選擇性的將這些視圖從這些內存移除。這個方法被調用的目的是在視圖被真正的銷毀前你可以執(zhí)行一些清空的任務。比如,你想要使用這個方法去清空視圖的觀察者或通知或者記錄視圖的狀態(tài)以便當重新讀取的時候恢復。
在iOS6之后,不再需要清空視圖的引用。因此,其他一些關于清理的方法,比如清空觀察者,也不是必要的了。
viewDidUnload:(iOS6廢除)
當視圖從內存中被消除后調用
視圖在地的內存情況下不再被銷毀所以這個方法也不再會調用
在iOS5之前,地的內存狀況發(fā)生之后,當前的試圖控制器的視圖不再被需要,系統(tǒng)會選擇性的在視圖控制器的視圖被銷毀后調用。這個方法使你執(zhí)行一些最后清空任務的最后機會如果你的視圖控制器存儲著對視圖的或子控件的單獨引用,你應該使用這個方法去釋放這些引用。你也可以使用這個方法去消除一些你再創(chuàng)建視圖時候所創(chuàng)建的但是當視圖不再的時候不再需要的關于對象的引用。你不應該使用這個方法去釋放用戶數據或者一些不能輕易被重新創(chuàng)建的數據。
在iOS6之后,清空在試圖控制器中對views和其他對象的引用已經沒有必要了。
當這個方法被調用的時候,視圖的屬性是空的。