iOS 控制器View載入順序詳細版

2021-08-28 01:34:00 字數 1875 閱讀 9543

1 一般情況下呼叫 init方法或者呼叫initwithnibname方法例項化uiviewcontroller, 不管呼叫哪個方法都為呼叫initwithnibname(方法定義如下)

- (id)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil
2 接著會呼叫loadview方法來生成uiviewcontroller.view

- (void)loadview
2.1.1.判斷下有沒有指定storyboard,如果有,就去載入storyboard描述的控制器的view

2.1.2.判斷下有沒有指定nibname,如果有,就去載入nibname描述的控制器的view

- (instancetype)initwithnibname:(nsstring *)nibnameornil bundle:(nsbundle *)nibbundleornil
如果判斷有沒有指定nibname,[self nibname]

2.1.3判斷下nibname是否為空,如果為空,他會嘗試找下有沒有跟控制器同名,但是不帶controller的xib

2.1.4跟控制器同名的xib,nibname = viewcontroller,但是這一步有條件,前提條件你沒有重寫loadview

2.1.5如果都沒有找到,直接建立預設控制器的view

3 - (void)awakefromnib;

這個方法用的時候,outlet還沒有連線起來,是view controller剛從storyboard建的時候,沒有完全建好,不過可能有一些事情要在這個方法裡面完成,比如splitviewdelegate,需要在非常早期完成。然後呼叫 viewdidload方法

4 - (void)viewdidload

9 解除安裝過程

- (void)viewwillunload;新增

- (void)viewdidunload;

- (void)dealloc;

viewdidload其實沒什麼可混淆的,無論通過什麼途徑載入(xcode或者ib,這裡的載入屬於例項化)完view後肯定會執行這個方法.

loadview需要分兩種情況.當你通過xcode例項化乙個類的時候就需要自己在controller中實現這個方法.而在ib中例項化就不需要實現它.

initwithnibname這個方法是在controller的類在ib中建立,但是通過xcode例項化controller的時候用的.

awakefromnib這個方法是乙個類在ib中被例項化是被呼叫的.看了帖子發現大家都推薦使用viewdidload而不要使用awakefromnib,應為viewdidload會被多次呼叫,而awakefromnib只會當從nib檔案中unarchive的時候才會被呼叫一次.實際測試中發現,當乙個類的awakefromnib被呼叫的時候,那麼這個類的viewdidload就不會被呼叫了,這個感覺很奇怪.

initwithcoder是乙個類在ib中建立但在xcode中被例項化時被呼叫的.比如,通過ib建立乙個controller的nib檔案,然後在xocde中通過initwithnibname來例項化這個controller,那麼這個controller的initwithcoder會被呼叫.

awakefromnib 當.nib檔案被載入的時候,會傳送乙個awakefromnib的訊息到.nib檔案中的每個物件,每個物件都可以定義自己的awakefromnib函式來響應這個訊息,執行一些必要的操作。也就是說通過nib檔案建立view物件是執行awakefromnib

viewdidload 當view物件被載入到記憶體是就會執行viewdidload,所以不管通過nib檔案還是**的方式建立物件都會執行viewdidload

iOS 懶載入子控制器的View

笨方法 新增子控制器的view nsuinteger count self.childviewcontrollers.count cgfloat scrollvieww scrollview.width cgfloat scrollviewh scrollview.height for nsuint...

iOS開發 深入了解控制器View的載入

前言 在面試中,面試官可能會問這樣的問題,loadview有什麼作用,它與viewdidload有何區別 首先我們得知道,控制器view是通過懶載入的方式進行載入的,即用到的時候再載入。loadview方法當我們用到控制器view時,就會呼叫控制器view的get方法,在get方法內部,首先判斷vi...

IOS 載入控制器的幾種方法順序

建立的viewcontroller viewcontrollerwith vc viewcontrollerwith alloc init 在這個載入過程中 相關方法呼叫順序是 init initwithnibname bundle loadview viewdidload 當command n建立...