VC的生命周期

viewload 相關(guān)

標(biāo)題中所說的3個(gè)方法,都是UIViewController的方法份招,跟UIViewController的view屬性的生命周期息息相關(guān)。接下來我會(huì)一一闡述它們的作用以及它們之間的聯(lián)系狞甚。

一锁摔、loadView

1.什么時(shí)候被調(diào)用?

每次訪問UIViewController的view(比如controller.view哼审、self.view)而且view為nil谐腰,loadView方法就會(huì)被調(diào)用。

2.有什么作用涩盾?

loadView方法是用來負(fù)責(zé)創(chuàng)建UIViewController的view

3.默認(rèn)實(shí)現(xiàn)是怎樣的十气?

默認(rèn)實(shí)現(xiàn)即[super loadView]里面做了什么事情。

1> 它會(huì)先去查找與UIViewController相關(guān)聯(lián)的xib文件春霍,通過加載xib文件來創(chuàng)建UIViewController的view

  • 如果在初始化UIViewController指定了xib文件名砸西,就會(huì)根據(jù)傳入的xib文件名加載對應(yīng)的xib文件

  • 如果沒有明顯地傳xib文件名,就會(huì)加載跟UIViewController同名的xib文件

2> 如果沒有找到相關(guān)聯(lián)的xib文件,就會(huì)創(chuàng)建一個(gè)空白的UIView芹枷,然后賦值給UIViewController的view屬性衅疙,大致如下

[super loadView]里面就大致完成1>和2>中敘述的內(nèi)容

4.怎樣正確使用這個(gè)方法?

大家都知道UIViewController的view可以通過xib文件來創(chuàng)建鸳慈,但是在某些情況下饱溢,xib不是那么地靈活,所以有時(shí)候我們想通過代碼來創(chuàng)建UIView走芋,比如:

** 如果想通過代碼來創(chuàng)建UIViewController的view绩郎,就要重寫loadView方法,并且不需要調(diào)用[super loadView]翁逞,因?yàn)樵诘?點(diǎn)里面已經(jīng)提到:若沒有xib文件肋杖,[super loadView]默認(rèn)會(huì)創(chuàng)建一個(gè)空白的UIView。我們既然要通過代碼來自定義UIView熄攘,那么就沒必要事先創(chuàng)建一個(gè)空白的UIView兽愤,以節(jié)省不必要的開銷。正確的做法應(yīng)該是這樣:**

不需要調(diào)用[super loadView]挪圾,你調(diào)用了也不會(huì)出錯(cuò)浅萧,只是造成了一些不必要的開銷。

總結(jié)一句話哲思,蘋果設(shè)計(jì)這個(gè)方法就是給我們自定義UIViewController的view用的

二洼畅、viewDidLoad

1.什么時(shí)候被調(diào)用?

無論你是通過xib文件還是重寫loadView方法創(chuàng)建UIViewController的view棚赔,在view創(chuàng)建完畢后帝簇,最終都會(huì)調(diào)用viewDidLoad方法

2.有什么作用?

一般我們會(huì)在這里做界面上的初始化操作靠益,比如往view中添加一些子視圖丧肴、從數(shù)據(jù)庫或者網(wǎng)絡(luò)加載模型數(shù)據(jù)裝配到子視圖中。例如:

復(fù)制代碼

復(fù)制代碼

復(fù)制代碼

復(fù)制代碼

三胧后、viewDidUnload

1.什么時(shí)候被調(diào)用芋浮?

iOS設(shè)備的內(nèi)存是極其有限的,如果應(yīng)用程序占用的內(nèi)存過多的話壳快,系統(tǒng)就會(huì)對應(yīng)用程序發(fā)出內(nèi)存警告纸巷。UIViewController就會(huì)收到didReceiveMemoryWarning消息。didReceiveMemoryWarning方法的默認(rèn)實(shí)現(xiàn)是:如果當(dāng)前UIViewController的view不在應(yīng)用程序的視圖層次結(jié)構(gòu)(View Hierarchy)中眶痰,即view的superview為nil的時(shí)候瘤旨,就會(huì)將view釋放,并且調(diào)用viewDidUnload方法

2.有什么作用竖伯?

上面說到存哲,發(fā)出內(nèi)存警告且view被釋放的時(shí)候就會(huì)調(diào)用viewDidUnload方法因宇,所以一般在釋放資源,主要是釋放界面元素相關(guān)的資源宏胯,將相關(guān)的實(shí)例都賦值為nil

3.dealloc也是用來釋放資源的羽嫡,那跟viewDidUnload有什么關(guān)系?

當(dāng)發(fā)出內(nèi)存警告調(diào)用viewDidUnload方法時(shí)肩袍,只是釋放了view,并沒有釋放UIViewController婚惫,所以并不會(huì)調(diào)用dealloc方法氛赐。即viewDidUnload和dealloc方法并沒有任何關(guān)系,dealloc方法只會(huì)在UIViewController被釋放的時(shí)候調(diào)用

四先舷、三個(gè)方法的關(guān)系

1.第一次訪問UIViewController的view時(shí)艰管,view為nil,然后就會(huì)調(diào)用loadView方法創(chuàng)建view

2.view創(chuàng)建完畢后會(huì)調(diào)用viewDidLoad方法進(jìn)行界面元素的初始化

3.當(dāng)內(nèi)存警告時(shí)蒋川,系統(tǒng)可能會(huì)釋放UIViewController的view牲芋,將view賦值為nil,并且調(diào)用viewDidUnload方法

4.當(dāng)再次訪問UIViewController的view時(shí)捺球,view已經(jīng)在3中被賦值為nil缸浦,所以又會(huì)調(diào)用loadView方法重新創(chuàng)建view

5.view被重新創(chuàng)建完畢后,還是會(huì)調(diào)用viewDidLoad方法進(jìn)行界面元素的初始化
VC1 >>push vc2

image.png

vc2 diss vc1


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氮兵,一起剝皮案震驚了整個(gè)濱河市裂逐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泣栈,老刑警劉巖卜高,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異南片,居然都是意外死亡掺涛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門疼进,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薪缆,“玉大人,你說我怎么就攤上這事颠悬“牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵赔癌,是天一觀的道長诞外。 經(jīng)常有香客問我,道長灾票,這世上最難降的妖魔是什么峡谊? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上既们,老公的妹妹穿的比我還像新娘濒析。我一直安慰自己,他們只是感情好啥纸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布号杏。 她就那樣靜靜地躺著,像睡著了一般斯棒。 火紅的嫁衣襯著肌膚如雪盾致。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天荣暮,我揣著相機(jī)與錄音庭惜,去河邊找鬼。 笑死穗酥,一個(gè)胖子當(dāng)著我的面吹牛护赊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播砾跃,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼骏啰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜓席?” 一聲冷哼從身側(cè)響起器一,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厨内,沒想到半個(gè)月后祈秕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雏胃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年请毛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞭亮。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡方仿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出统翩,到底是詐尸還是另有隱情仙蚜,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布厂汗,位于F島的核電站委粉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娶桦。R本人自食惡果不足惜贾节,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一汁汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栗涂,春花似錦知牌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忿墅,卻和暖如春袭厂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背球匕。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帖烘,地道東北人亮曹。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像秘症,于是被迫代替她去往敵國和親照卦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • UIViewController是IOS程序中的一個(gè)重要組成部分乡摹,扮演者一個(gè)大管家的身份役耕,管理著程序中的眾多視圖:...
    nothing_c閱讀 894評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,089評論 1 32
  • 7、不使用IB是聪廉,下面這樣做有什么問題瞬痘? 6、請說說Layer和View的關(guān)系板熊,以及你是如何使用它們的框全。 1.首先...
    AlanGe閱讀 656評論 0 1
  • IPhone下每個(gè)app可用的內(nèi)存是被限制的,如果一個(gè)app使用的內(nèi)存超過20M干签,則系統(tǒng)會(huì)向該app發(fā)送Memor...
    Yumazhiyao閱讀 3,619評論 1 11
  • 經(jīng)常會(huì)用到 ViewController津辩,但是對它的生命周期一直沒有一個(gè)比較完整地理解,最近看了幾篇博客容劳,在這里對...
    戀空K閱讀 4,501評論 0 2