iOS筆記 -- viewController生命周期

一、ViewController的生命周期(如圖1)會(huì)經(jīng)歷初始化、加載視圖殴俱、銷(xiāo)毀視圖、生命結(jié)束等過(guò)程枚抵,詳細(xì)過(guò)程如下:

圖1

1. init

初始化ViewController

2.loadView

當(dāng)view需要被展示而它卻是nil時(shí)线欲,viewController會(huì)調(diào)用該方法。如果代碼維護(hù)View的話(huà)需要重寫(xiě)此方法汽摹,使用xib維護(hù)View的話(huà)不用重寫(xiě)李丰。

3.viewDidLoad

執(zhí)行完loadView后繼續(xù)執(zhí)行viewDidLoad,loadView時(shí)還沒(méi)有view逼泣,而viewDidLoad時(shí)view已經(jīng)創(chuàng)建好了趴泌。

4.viewWillAppear?

視圖將出現(xiàn)在屏幕之前,馬上這個(gè)視圖就會(huì)被展現(xiàn)在屏幕上了;

5.viewDidAppear??

視圖已在屏幕上渲染完成 當(dāng)一個(gè)視圖被移除屏幕并且銷(xiāo)毀的時(shí)候的執(zhí)行順序拉庶,這個(gè)順序差不多和上面的相反;

6.viewWillDisappear

視圖將被從屏幕上移除之前執(zhí)行

7.viewDidDisappear

視圖已經(jīng)被從屏幕上移除嗜憔,用戶(hù)看不到這個(gè)視圖了

8.viewWillUnload

如果當(dāng)前有能被釋放的view,系統(tǒng)會(huì)調(diào)用viewWillUnload方法來(lái)釋放view

9.viewDidUnload

當(dāng)系統(tǒng)內(nèi)存吃緊的時(shí)候會(huì)調(diào)用該方法砍的,在iOS 3.0之前didReceiveMemoryWarning是釋放無(wú)用內(nèi)存的唯一方式痹筛,但是iOS 3.0及以后viewDidUnload方法是更好的方式莺治。在該方法中將所有IBOutlet(無(wú)論是property還是實(shí)例變量)置為nil(系統(tǒng)release view時(shí)已經(jīng)將其release掉了)廓鞠。在該方法中釋放其他與view有關(guān)的對(duì)象、其他在運(yùn)行時(shí)創(chuàng)建(但非系統(tǒng)必須)的對(duì)象谣旁、在viewDidLoad中被創(chuàng)建的對(duì)象床佳、緩存數(shù)據(jù)等。一般認(rèn)為viewDidUnload是viewDidLoad的鏡像榄审,因?yàn)楫?dāng)view被重新請(qǐng)求時(shí)砌们,viewDidLoad還會(huì)重新被執(zhí)行。

10.dealloc

視圖被銷(xiāo)毀,此處需要對(duì)你在init和viewDidLoad中創(chuàng)建的對(duì)象進(jìn)行釋放.關(guān)于viewDidUnload :在發(fā)生內(nèi)存警告的時(shí)候如果本視圖不是當(dāng)前屏幕上正在顯示的視圖的話(huà)浪感,viewDidUnload將會(huì)被執(zhí)行昔头,本視圖的所有子視圖將被銷(xiāo)毀以釋放內(nèi)存,此時(shí)開(kāi)發(fā)者需要手動(dòng)對(duì)viewLoad、viewDidLoad中創(chuàng)建的對(duì)象釋放內(nèi)存影兽。因?yàn)楫?dāng)這個(gè)視圖再次顯示在屏幕上的時(shí)候揭斧,viewLoad、viewDidLoad 再次被調(diào)用峻堰,以便再次構(gòu)造視圖讹开。

二、ViewController加載view過(guò)程捐名,見(jiàn)圖2

圖2

從圖中可以看到旦万,在view加載過(guò)程中首先會(huì)調(diào)用loadView方法,在這個(gè)方法中主要完成一些關(guān)鍵view的初始化工作镶蹋,比如UINavigationViewController和UITabBarController等容器類(lèi)的ViewController成艘;接下來(lái)就是加載view,加載成功后贺归,會(huì)接著調(diào)用viewDidLoad方法狰腌,這里要記住的一點(diǎn)是,在loadView之前牧氮,是沒(méi)有view的琼腔,也就是說(shuō),在這之前踱葛,view還沒(méi)有被初始化丹莲。完成viewDidLoad方法后,ViewController里面就成功的加載view了尸诽,如上圖右下角所示甥材。

三、ViewController卸載View過(guò)程性含,見(jiàn)圖3

圖3

從圖中可以看到洲赵,當(dāng)系統(tǒng)發(fā)出內(nèi)存警告時(shí),會(huì)調(diào)用didReceiveMemoeryWarning方法商蕴,如果當(dāng)前有能被釋放的view叠萍,系統(tǒng)會(huì)調(diào)用viewWillUnload方法來(lái)釋放view,完成后調(diào)用viewDidUnload方法绪商,至此苛谷,view就被卸載了。此時(shí)原本指向view的變量要被置為nil格郁,具體操作是在viewDidUnload方法中調(diào)用self.myButton = nil

四腹殿、總結(jié):

loadView和viewDidLoad的區(qū)別就是独悴,loadView時(shí)view還沒(méi)有生成,viewDidLoad時(shí)锣尉,view已經(jīng)生成了刻炒,loadView只會(huì)被調(diào)用一次,而viewDidLoad可能會(huì)被調(diào)用多次(View可能會(huì)被多次加載)自沧,當(dāng)view被添加到其他view中之前落蝙,會(huì)調(diào)用viewWillAppear,之后會(huì)調(diào)用viewDidAppear暂幼。當(dāng)view從其他view中移除之前筏勒,調(diào)用viewWillDisAppear,移除之后會(huì)調(diào)用viewDidDisappear旺嬉。當(dāng)view不再使用時(shí)管行,受到內(nèi)存警告時(shí),ViewController會(huì)將view釋放并將其指向?yàn)閚il邪媳。

ViewController的生命周期中各方法執(zhí)行流程如下:

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捐顷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雨效,更是在濱河造成了極大的恐慌迅涮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徽龟,死亡現(xiàn)場(chǎng)離奇詭異叮姑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)据悔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)传透,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人极颓,你說(shuō)我怎么就攤上這事朱盐。” “怎么了菠隆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵兵琳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我骇径,道長(zhǎng)躯肌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任既峡,我火速辦了婚禮羡榴,結(jié)果婚禮上碧查,老公的妹妹穿的比我還像新娘运敢。我一直安慰自己校仑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布传惠。 她就那樣靜靜地躺著迄沫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卦方。 梳的紋絲不亂的頭發(fā)上羊瘩,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音盼砍,去河邊找鬼尘吗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浇坐,可吹牛的內(nèi)容都是我干的睬捶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼近刘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擒贸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起觉渴,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤介劫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后案淋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體座韵,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年踢京,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了回右。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漱挚,死狀恐怖翔烁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旨涝,我是刑警寧澤蹬屹,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站白华,受9級(jí)特大地震影響慨默,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弧腥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一厦取、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧管搪,春花似錦虾攻、人聲如沸铡买。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奇钞。三九已至,卻和暖如春漂坏,著一層夾襖步出監(jiān)牢的瞬間景埃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工顶别, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷徙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓驯绎,卻偏偏與公主長(zhǎng)得像蒂胞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子条篷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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