控制器view的生命周期

1.loadView
1)當(dāng)程序訪問(wèn)了控制器的view屬性時(shí),會(huì)判斷控制器的view是否已經(jīng)存在,如果已經(jīng)存在,會(huì)直接返回一個(gè)已經(jīng)存在的view。
2)如果不存在,那么就會(huì)調(diào)用控制器的loadView方法,如果控制器實(shí)現(xiàn)了這個(gè)方法,就會(huì)加載loadView方法中自定義的view。
3)如果沒(méi)有實(shí)現(xiàn)控制器的loadView方法,那么它會(huì)先去看一下當(dāng)前控制器是否從storyboard當(dāng)中創(chuàng)建的,如果是 就從storyboard當(dāng)中創(chuàng)建的view。
4)如果不是storyboard,那么它會(huì)去看有沒(méi)有指定nibName的xib,如果有,就從指定名稱的xib來(lái)描述控制器的view。
5)如果沒(méi)有指定名稱的xib,就會(huì)去看有沒(méi)有跟控制器名稱相同的xib,如果有,就用這個(gè)xib描述的view。
6)如果沒(méi)有跟控制器名稱相同的xib,那么就會(huì)去看有沒(méi)有跟控制器名稱相同去掉controller的xib,如果有,就用這個(gè)xib描述的view。

2.前面6步實(shí)際都是在做loadView,做完這一步之后,就調(diào)用viewDidLoad,只會(huì)被調(diào)用一次

3.在視圖顯示之前調(diào)用viewWillAppear,該函數(shù)可以被多次調(diào)用

4.在布局變化前后,調(diào)用viewWillLayoutSubviews\viewDidLayoutSubviews

5.視圖顯示完畢,調(diào)用viewDidAppear

6.在視圖消失之前,調(diào)用viewWillDisApperar,該函數(shù)可以被多次調(diào)用

7.視圖消失完畢,調(diào)用viewDidDisAppear。

8.控制器還有三個(gè)方法需要注意:viewWillUnload\viewDidUnload\didReceiveMemoryWarning

 8.1當(dāng)程序內(nèi)存不夠用時(shí),最先拿到內(nèi)存警告的是UIApplication→Window→Window.rootViewController→.....(一層一層往下傳).

 8.2當(dāng)控制器收到內(nèi)存警告時(shí),如果要確定要銷毀View,則會(huì)調(diào)用viewWillUnload/viewDidUnload

9.當(dāng)控制器的View被銷毀之后,如果又需要顯示,則控制器會(huì)調(diào)用loadView,又從第一步的loadView開(kāi)始走一遍

總結(jié):控制器的生命周期實(shí)際是一個(gè)閉合的環(huán).

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

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

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