淺談ViewController的生命周期

awakeFromNib

當(dāng) view 被從 Storyboard 或者 Nib 文件中加載出來(lái)時(shí)會(huì)調(diào)用這個(gè)方法,只會(huì)在所有對(duì)象被創(chuàng)建后調(diào)用。

這個(gè)方法在執(zhí)行l(wèi)oadNibNamed:owner:,storyboardWithName:bundle:這一類方法時(shí)會(huì)調(diào)用。

此方法覆蓋時(shí)需要調(diào)用 super 方法。默認(rèn)的 super 方法里沒(méi)有實(shí)現(xiàn)。

loadView()

View Controller 創(chuàng)建后需要加載 self.view 時(shí)會(huì)調(diào)用這個(gè)方法。此方法不應(yīng)該被直接調(diào)用。

如果我們的界面是在 Storyboard 中創(chuàng)建的,那我們也不應(yīng)該覆蓋這個(gè)方法。

此方法覆蓋時(shí)不該調(diào)用 super 方法。

viewDidLoad()

當(dāng) View Controller 的 View 被加載入后會(huì)調(diào)用這個(gè)方法,因此正常情況下只會(huì)調(diào)用一次。

此方法覆蓋時(shí)需要調(diào)用 super 方法。

viewWillAppear

當(dāng) View 將要被添加到 View Hierarchy 中時(shí)會(huì)調(diào)用這個(gè)方法,每一次 View 將要顯示時(shí)都會(huì)調(diào)用。在這個(gè)方法被調(diào)用時(shí),也是在顯示 View 所需要的動(dòng)畫(huà)被配置前。

這個(gè)時(shí)候在做一些和 frame 相關(guān)的操作時(shí)仍會(huì)出錯(cuò),在這里 View 將要被加入 View Hierarchy,但是仍舊沒(méi)有被添加進(jìn)去。

此方法覆蓋時(shí)需要調(diào)用 super 方法。

viewWillLayoutSubviews

在 ViewController.view 將要布局 Subviews 時(shí)調(diào)用。

在這之后 AutoLayout 會(huì)改變布局。

viewDidLayoutSubviews

已經(jīng)布局完成,也可以做一些操作。

已通過(guò) AutoLayout 布局。

viewDidAppear

此時(shí)界面已經(jīng)被顯示出來(lái)了,做一些操作時(shí)可能會(huì)讓界面變化可見(jiàn)。

viewWillDisappear

在界面將要消失時(shí)調(diào)用

viewDidDisappear

界面消失后調(diào)用。

因?yàn)榇藭r(shí)界面的布局相當(dāng)于發(fā)生了變化,viewWillLayoutSubviews和viewDidLayoutSubviews也將在他們之間調(diào)用。

最后編輯于
?著作權(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)容