畫面跳轉各方法呼叫的時機-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear
init:方法
在init方法中例項化必要的物件(遵從LazyLoad思想)
init方法中初始化ViewController本身
loadView:方法
這是當沒有正在使用nib檢視頁面,子類將會建立自己的自定義檢視層。絕不能直接呼叫。
如果手工維護views,必須過載重寫該方法。
當view需要被展示而它卻是nil時,viewController會呼叫該方法。
loadView和IB構建view
你在控制器中實現了loadView方法,那麼你可能會在應用執行的某個時候被記憶體管理控制呼叫。 如果裝置記憶體不足的時候, view 控制器會收到didReceiveMemoryWarning的訊息。 預設的實現是檢查當前控制器的view是否在使用。 如果它的view不在當前正在使用的view hierarchy裡面,且你的控制器實現了loadView方法,那麼這個view將被release, loadView方法將被再次呼叫來建立一個新的view。
viewDidLoad:方法
在檢視載入後被呼叫:
如果是在程式碼中建立的檢視載入器,他將會在loadView方法後被呼叫;
如果是從nib檢視頁面輸出,他將會在檢視設定好後後被呼叫。
過載重寫該方法以進一步定製view
在iPhone OS 3.0及之後的版本中,還應該過載重寫viewDidUnload來釋放對view的任何索引
viewDidLoad後呼叫資料Model
viewWillAppear: 方法Called when the view is about to made visible. Default does nothing
檢視即將可見時呼叫。預設情況下不執行任何操作
viewDidAppear:
Called when the view has been fully transitioned onto the screen. Default does nothing
檢視已完全過渡到螢幕上時呼叫
viewWillDisappear:
Called when the view is dismissed, covered or otherwise hidden. Default does nothing
檢視被駁回時呼叫,覆蓋或以其他方式隱藏。預設情況下不執行任何操作
viewDidDisappear:
Called after the view was dismissed, covered or otherwise hidden. Default does nothing
檢視被駁回後呼叫,覆蓋或以其他方式隱藏。預設情況下不執行任何操作
執行順序:
從程式的log來看:
2012-10-19 15:51:44.811inHyron[483:b903] init
2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad
2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear
2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear
很明顯,先執行init、然後執行viewDidLoad,然後是viewWillAppear最後是viewDidAppear,這樣檢視就建立好了,當檢視消失或者被覆蓋的時候:
2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear
2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear
這樣一來檢視就消失了,當模擬記憶體警告的時候:
2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.
2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload
2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload
從log可以看出,當檢視控制物件收到記憶體警告的時候,程式會執行viewWillUnload最後是執行viewDidUnload。
這樣,一套的流程就完成了.
其實當檢視A切換到檢視B的真正的流程並不是按上面的流程跑下來的,
並不是A檢視:1,viewWillDisappear 2,viewDidDisappear,然後B檢視:3,viewDidLoad 4,viewVillAppear 5,viewDidAppear這樣。
正確的順序流程應該是:
1,B檢視 viewDidLoad
2,A檢視 viewWillDisappear
3,B檢視 viewVillAppear
4,A檢視 viewDidDisappear
5,B檢視 viewDidAppear
如圖所示