測試環境 xcode 6.3 Storyboard ios 8.3
測試詳情:由一個controller push到下一個controller 然後返回 控制器中方法的執行。(controller 1 c1 controlelr 2 c2)
C1爲程序入口
測試結果:
執行順序:
1. C1 initWithCoder: 初始化方法;
2. C1 loadView 從nib載入視圖 ,通常這一步不需要去幹涉。除非你沒有使用xib文件創建視圖
3.C1 viewDidLoad 載入完成,可以進行自定義數據以及動態創建其他控件
4. C1 viewWillAppear: 視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
5. C1 viewDidAppear: 視圖已在屏幕上渲染完成
觸發push事件後
6. C2 initWithCoder: 初始化方法;
7. C2 loadView 從nib載入視圖 ,通常這一步不需要去幹涉。除非你沒有使用xib文件創建視圖
8.C2 viewDidLoad 載入完成,可以進行自定義數據以及動態創建其他控件
9.C1 viewWillDisappear: 視圖將被從屏幕上移除之前執行
10.C2 viewWillAppear: 視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
11. C1 viewDidDisappear: 視圖已經被從屏幕上移除,用戶看不到這個視圖了
12.C2 viewDidAppear: 視圖已在屏幕上渲染完成
點擊返回跟視圖控制器後:
13. C2 viewWillDisappear: 視圖將被從屏幕上移除之前執行
14. C1 viewWillAppear: 視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
15 C2 viewDidDisappear: 視圖已經被從屏幕上移除,用戶看不到這個視圖了
16 C1 viewDidAppear: 視圖已在屏幕上渲染完成
其中Viewcontroller 爲C1 TestViewController爲 C2.
- (void)viewDidLoad;
一個APP在載入時會先通過調用loadView方法或者載入IB中創建的初始界面的方法,將視圖載入到內存中。然後會調用viewDidLoad方法來進行進一步的設置。通常,我們對於各種初始數據的載入,初始設定等很多內容,都會在這個方法中實現,所以這個方法是一個很常用,很重要的方法。
但是要注意,這個方法只會在APP剛開始加載的時候調用一次,以後都不會再調用它了,所以只能用來做初始設置。
- (void)viewWillAppear:(BOOL)animated;
系統在載入所有數據後,將會在屏幕上顯示視圖,這時會先調用這個方法。通常我們會利用這個方法,對即將顯示的視圖做進一步的設置。例如,我們可以利用這個方法來設置設備不同方向時該如何顯示。
另外一方面,當APP有多個視圖時,在視圖間切換時,並不會再次載入viewDidLoad方法,所以如果在調入視圖時,需要對數據做更新,就只能在這個方法內實現了。所以這個方法也非常常用。
- (void)viewDidAppear:(BOOL)animated;
有時候,由於一些特殊的原因,我們不能在viewWillApper方法裏,對視圖進行更新。那麼可以重寫這個方法,在這裏對正在顯示的視圖進行進一步的設置。
- (void)viewWillDisappear:(BOOL)animated;
在視圖變換時,當前視圖在即將被移除、或者被覆蓋時,會調用這個方法進行一些善後的處理和設置。
由於在IOS4之後,系統允許將APP在後臺掛起,所以在按了Home鍵之後,系統並不會調用這個方法,因爲就這個APP本身而言,APP顯示的view,仍是掛起時候的view,所以並不會調用這個方法。
- (void)viewDidDisappear:(BOOL)animated;
我們可以重寫這個方法,對已經消失,或者被覆蓋,或者已經隱藏了的視圖做一些其他操作。
Phone開發必不可少的要用到這兩個方法。 他們都可以用來在視圖載入的時候,初始化一些內容。 但是他們有什麼區別呢?
viewDidLoad 此方法只有當view從nib文件初始化的時候才被調用。
loadView 此方法在控制器的view爲nil的時候被調用。 此方法用於以編程的方式創建view的時候用到。 如:
- - ( void ) loadView {
- UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
- mainScreen] .applicationFrame] ;
- [ view setBackgroundColor:_color] ;
- self.view = view ;
- }
你在控制器中實現了loadView方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 如果設備內存不足的時候, view 控制器會收到didReceiveMemoryWarning的消息。 默認的實現是檢查當前控制器的view是否在使用。如果它的view不在當前正在使用的view hierarchy裏面,且你的控制器實現了loadView方法,那麼這個view將被release, loadView方法將被再次調用來創建一個新的view。