生命周期的圖如下:
ios 視圖的生命周期(View Life Cycle)
事件發(fā)生的須序非常重要,這好讓程序員能在適當(dāng)?shù)臅r機(jī)執(zhí)行事件,此時了解view life Cycle是非常必要的。
View的加載過程
首先訪問view屬性,如果view存在,則直接加載。如果不存在,則調(diào)用loadView方法。
loadView方法執(zhí)行操作如下:
如果你覆蓋了loadView方法,則必須創(chuàng)建view給UIVIewController的view屬性,如果你沒有覆蓋方法,UIViewController會默認(rèn)調(diào)用父類的方法加載初始化view
從圖中可以看到,在view加載過程中首先會調(diào)用loadView方法,在這個方法中主要完成一些關(guān)鍵view的初始化工作。然后就是加載View,加載成功后接著調(diào)用viewDidLoad方法。有一個很重要的地方就是,在loadView之前,view是不存在的,也就是說view還沒有被初始化,直到完成viewDidLoad方法后,ViewController里面就成功的加載view了。
View的卸載
當(dāng)系統(tǒng)發(fā)出內(nèi)存警告時,會調(diào)用didReceiveMemoeryWarning方法,如果當(dāng)前有能被釋放的view,系統(tǒng)會調(diào)用viewWillUnload方法來釋放view,完成后調(diào)用viewDidUnload方法,至此,view就被卸載了。此時原本指向view的變量要被置為nil,具體操作是在viewDidUnload方法中調(diào)用.
總結(jié):
loadView和viewDidLoad的區(qū)別就是,loadView時view還沒有生成,viewDidLoad時,view已經(jīng)生成了,loadView只會被調(diào)用一次,而viewDidLoad可能會被調(diào)用多次(View可能會被多次加載),當(dāng)view被添加到其他view中之前,會調(diào)用viewWillAppear,之后會調(diào)用viewDidAppear。當(dāng)view從其他view中移除之前,調(diào)用viewWillDisAppear,移除之后會調(diào)用viewDidDisappear。當(dāng)view不再使用時,受到內(nèi)存警告時,ViewController會將view釋放并將其指向為nil。
ViewController的生命周期中各方法掃行須序如下:
- init—>
- loadView—>
- viewDidLoad—>
- viewWillAppear—>
- viewDidAppear—>
- viewWillDisappear—>
- viewDidDisappear—>
- viewWillUnload->
- viewDidUnload—>
- dealloc