ViewController加載View
從Storyboards中加載的時候,會調用initWithCode,如果不存在則調用init。之後對裡面的每個對象調用awakeFromNib方法。
從內存中alloc出來的情況下,調init方法。
ViewController查找與其關聯的view,其順序是:
先判斷子類是否重寫了loadView,如果有直接調用。之後調viewDidLoad完成View的加載。
如果是外部通過調用initWithNibName:bundle指定nib文件名的話,ViewController記載此nib來創建View。
如果initWithNibName:bundle的name參數為nil,則ViewController會通過以下兩個步驟找到與其關聯的nib。
如果類名包含Controller,例如ViewController的類名是MyViewController,則查找是否存在MyView.nib;
找跟ViewController類名一樣的文件,例如MyViewController,則查找是否存在MyViewController.nib。
如果子類沒有重寫的loadView,則ViewController會從StroyBoards中找或者調用其默認的loadView,默認的loadView返回一個空白的UIView對象。
注意第一步
ViewController是判斷子類是否重寫了loadView,而不是判斷調用子類的loadView之後ViewController的View是否為空。就是說,如果子類重寫了loadView的話,不管子類在loadView裡面能否獲取到View,ViewController都會直接調viewDidLoad完成View的加載。
ViewController生命周期函數
啟動順序
initWithCoder
如果不存在則調用init
loadView //如果說你進行了重寫,會在這裡調用,這一步可以參考下文
viewDidLoad
view剛被load完,且已經連接到IBoutlet後,這裡放置需要放到初始化裡去完成事情。[此時view還沒有被顯示]
viewWillAppear
當view即將被顯示時調用。
他適合做兩種事情:
1.最後時刻加載一些高開銷的操作
2.修改幾何特性
說明:
[如果需要調整view的幾何特性[旋轉之後 變化之類的巴拉巴拉] 在這裡書寫]。
如果是長時間的操作 則最好在此開個現成操作。
viewWillLayoutSubviews
即將
viewDidLayoutSubviews
view的子view的frame變化時[如:旋轉屏幕]
經常用此方法[did]來處理旋轉後的布局問題。
viewDidAppear
剛顯示
查看原圖