View的生命周期

View的生命周期

ViewController的初始化方式

viewController有三種初始化方式 - 通過純代碼創(chuàng)建掺冠,通過IB創(chuàng)建和通過StoryBoard創(chuàng)建

  • ********通過storyboard創(chuàng)建******** - 通過創(chuàng)建UIStoryboard的實例沉馆,調用instantiateViewControllerWithIdentifier:方法,便可以創(chuàng)建一個視圖控制器
  • ********通過IB創(chuàng)建******** - 通過調用控制器的initWithNibName:bundle:初始化方法德崭,傳入相應的nibName即可
  • ********通過純代碼創(chuàng)建******** - 調用init便可以創(chuàng)建一個視圖控制器

awakeFromNib

nib文件完成解碼時斥黑,nib的加載機制會向相關對象發(fā)送awakeFromNib消息硕舆。簡單的說啼染,如果一個對象的awakeFromNib函數被調用总寻,就表明這個對象已經成功的通過nib文件創(chuàng)建北戏。只用通過IB或者是Storyboard的方式創(chuàng)建的對象才會調用該函數朴上。

view controller的子類中英遭,如果在函數被調用庵佣,表明相應的視圖控制器已經創(chuàng)建检柬。但此時視圖控制器的視圖其實都還沒有創(chuàng)建服球。
view的子類中茴恰,如果該函數被調用,表明該視圖已經創(chuàng)建完成斩熊,視圖上的相關控件都也已經創(chuàng)建完成琐簇,而且outlet and action的聯(lián)系也已經創(chuàng)建。

loadView和viewDidLoad

因為視圖控制器中的view是采用lazy加載模式座享,所以當view第一次被調用時才會進行加載婉商。

loadView - 在當view屬性被調用,但值為nil時才會被調用渣叛。你不能自己手動調用這個函數丈秩,這個函數會加載或創(chuàng)建一個view并賦值給視圖控制器的view屬性

如果視圖控制器的nibName不為nil時蘑秽,說明有相關的nib文件。這種情況發(fā)生在使用storyboard肠牲,直接調用initWithNibName:bundle:靴跛,或發(fā)現(xiàn)程序沙盒app bundle中有和視圖控制器的類名相同的nib文件時。如果沒有相關聯(lián)的nib文件肥印,這個函數會默認創(chuàng)建一個UIView的實例。

如果你是使用IB進行來創(chuàng)建視圖深碱,那你一定不能重載這個函數。

如果你是使用純代碼創(chuàng)建視圖功咒,你可以重載這個函數設置根視圖并賦值給view屬性,并且在這個函數中不能調用父類的該方法绞蹦。

viewDidLoad - 當view controller的視圖已經被加載進內存后調用,你可以重載這個函數刊侯,對視圖進行調整锉走。

viewWillLayoutSubviews 和 viewDidLayoutSubviews

當視圖控制器的視圖view的大小bounds發(fā)生改變或者是調整了視圖view的子視圖的位置positions時,會被調用亭饵。這兩個函數默認是沒有執(zhí)行任何操作梁厉,你可以在自己的viewController的子類中重寫這兩個函數。

viewDidLayoutSubviews - 這個函數調用词顾,標示根視圖已經布局完成,但不意味著view的子視圖都已經完成了布局昔驱,每一個視圖的布局都由自己負責上忍。

viewWillAppear 和 viewDidAppear

viewWillAppear - 當view controller的視圖將要被添加到視圖的層次結構(view hierarchy)之前和要執(zhí)行展示視圖相關的動畫之前,該函數會被調用腋颠。如果重載了該函數吓笙,必須調用super的方法。如果的view controller(VC1)通過popover 彈出一個新的view controller(VC2),當VC2消失(dismiss)時,VC1并不會調用viewWillAppear函數

viewDidAppear - 當視圖控制器的視圖(view)已經添加到視圖的層次結構(view hierarchy)之后侮穿,會調用該函數歌径。同樣的回铛,如果的view controller(VC1)通過popover 彈出一個新的view controller(VC2)克锣,當VC2消失(dismiss)時,VC1并不會調用viewDidAppear函數

viewWillDisappear 和 viewDidDisappear

viewWillAppearviewDidAppear方法類似验残,在視圖控制器的視圖從視圖的層次結構中被移除的前后巾乳,會調用這兩個方法

layoutSubviews

layoutSubviews并不是視圖控制器的函數,而是視圖(view)的一個方法胆绊。可以通過重寫該方法仆抵,為視圖的子視圖添加約束种冬,確定確定子視圖的大小和位置。你不可以直接調用該方法娱两,當要更新視圖布局是,可以將該視圖通過調用setNeedsLayout方法進行標記慨蛙,當該視圖會在下一個重繪時調用layoutSubviews方法纪挎。如果想立即更新視圖,可以通過調用layoutIfNeeded方法實現(xiàn)通砍。

ViewController的周期

initWithCoder:initWithNibName:bundle: - 初始化視圖控制器
awakeFromNib -如果是通過xib或storyboard創(chuàng)建的,會調用該方法封孙,表明視圖控制器已經從nib文件中加載成功。
loadView - 創(chuàng)建或加載根視圖泡徙,一般來說只會調用一次膜蠢。
viewDidload - 表明視圖控制器中的視圖已經創(chuàng)建或加載完畢,xib或storyboard中的各種控件這時候也依舊加載成功礁竞。
viewWillAppear - 視圖將要顯示之前調用杉辙。
viewWillLayoutSubviews -將要對視圖進行布局。
viewDiDLayoutSubviews -對視圖布局完成蜘矢。
viewDidAppear - 視圖已經顯示在屏幕上之后調用。
viewWillDisappear - 視圖將要從屏幕上移除上調用并淋。
viewDidDisappear - 視圖已經從屏幕上移除之后調用珍昨。

VC1pushVC2時,viewWillAppear兔毙、 viewDidAppearviewWillDisappear澎剥、 viewDidDisappear的調用順序是什么赶舆?

具體的調用順序
VC1 : viewWillDisappear
VC2 : viewWillAppear
VC1 : viewDidDisappear
VC2 : viewDidAppear

參考資料

  1. UIViewController Class Reference
  2. Can somebody explain the process of a UIViewController birth (which method follows which)?
  3. UIView的生命周期總結
  4. Which should I use, -awakeFromNib or -viewDidLoad?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末芜茵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绞佩,更是在濱河造成了極大的恐慌,老刑警劉巖品山,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笆载,居然都是意外死亡酸些,警方通過查閱死者的電腦和手機檐蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來市栗,“玉大人,你說我怎么就攤上這事填帽×茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵嘹悼,是天一觀的道長层宫。 經常有香客問我,道長萌腿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任米死,我火速辦了婚禮贮庞,結果婚禮上,老公的妹妹穿的比我還像新娘勘天。我一直安慰自己,他們只是感情好脯丝,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晕拆,像睡著了一般材蹬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堤器,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音整吆,去河邊找鬼辉川。 笑死,一個胖子當著我的面吹牛乓旗,可吹牛的內容都是我干的。 我是一名探鬼主播汇跨,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渺鹦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了塞颁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祠锣,失蹤者是張志新(化名)和其女友劉穎咽安,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體澡腾,經...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年毅糟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姆另。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坟乾,死狀恐怖,靈堂內的尸體忽然破棺而出明吩,到底是詐尸還是另有隱情,我是刑警寧澤贺喝,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布宗兼,位于F島的核電站氮采,受9級特大地震影響,放射性物質發(fā)生泄漏鹊漠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一登钥、第九天 我趴在偏房一處隱蔽的房頂上張望娶靡。 院中可真熱鬧,春花似錦姿锭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌唾。三九已至放前,卻和暖如春犀斋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叽粹。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工却舀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挽拔。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓螃诅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親术裸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容