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