UIViewController的生命週期

測試環境 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的時候用到。 如:

  1.  
  2. - ( void ) loadView {
  3.     UIView *view = [ [ UIView alloc] initWithFrame:[ UIScreen
  4. mainScreen] .applicationFrame] ;
  5.     [ view setBackgroundColor:_color] ;
  6.     self.view = view ;  

你在控制器中實現了loadView方法,那麼你可能會在應用運行的某個時候被內存管理控制調用。 如果設備內存不足的時候, view 控制器會收到didReceiveMemoryWarning的消息。 默認的實現是檢查當前控制器的view是否在使用。如果它的view不在當前正在使用的view hierarchy裏面,且你的控制器實現了loadView方法,那麼這個view將被release, loadView方法將被再次調用來創建一個新的view。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章