iOS ViewController生命週期

init—> loadView—> viewDidLoad—>viewWillAppear—> viewWillLayoutSubviews—> viewDidLayoutSubviews—>viewDidAppear—> viewWillDisappear—> viewDidDisappearbash

init—> loadView—> viewDidLoad—>viewWillAppear—> viewWillLayoutSubviews—> viewDidLayoutSubviews—>viewDidAppear—> viewWillDisappear—> viewDidDisappear—>接收到內存警告—>viewWillUnload—> viewDidUnloadapp

1. init(init 法中初始化ViewController自己)

應該只有相關數據的初始化,並且這些數據是比較關鍵的數據。 init方法中實例化必要的對象(聽從LazyLoad思想)佈局

2. loadView(controller的view爲nil時調用,初始化view)

view 控制器默認會註冊memory warning notification。 當第一次使用控制器的view時,會調用loadView方法建立view,通常在這裏自定義view(如手動建立本身的視圖,那麼應該覆蓋這個方法並將它們賦值給試圖控制器的 view 屬性); 視圖控制器自帶的視圖並非視圖控制器一建立就立刻建立的,而是被訪問時才建立即自動調用loadView,這個方法返回時視圖就建立好了動畫

- (void)loadView{
    //self.view.backgroundColor = [UIColor greenColor];//這時候view還沒建立,程序會崩
    [super loadView];
    //loadView返回以後,view建立好了
    self.view.backgroundColor = [UIColor greenColor];
}
複製代碼
3. viewDidLoad(view 從nib文件初始化)

當控制器的view建立完畢時會調用(視圖控制器自帶的視圖建立完就會自動調用這個方法),也就是在loadView後調用,通常在這裏添加子控件、初始化數據。 只有在視圖控制器將其視圖載入到內存以後才調用該方法,這是執行任何其餘初始化操做的入口spa

4. viewWillAppear(頁面即將被顯示)

當試圖將要添加到窗口中而且還不可見的時候或者上層視圖移出圖層後本視圖變成頂級視圖時調用該方法。通常在View被添加到superView以前,切換動畫以前調用。在這裏進行一些顯示前的處理。好比鍵盤彈出、一些特殊的動畫(好比狀態條和navbar的顏色)、改變視圖方向等的操做。code

5. viewWillLayoutSubviews(將要佈局控制器View的子控件時調用)

通常用於顯示前,對子控件進行佈局。對象

6. viewDidLayoutSubviews(佈局控制器View的子控件完成時調用)

子控件佈局完成,能夠在這裏對子控件進行一些初始化。內存

7. viewDidAppear(已經出現)

當視圖添加到窗口中之後或者上層視圖移出圖層後本視圖變成頂級視圖時調用,用於放置那些須要在視圖顯示後執行的代碼。資源

8. viewWillDisappear(即將消失)
9. viewDidDisappear(已經消失)
10. viewWillUnload
11. viewDidUnload(當控制器的view由於內存警告被銷燬時調用)
  • 在這裏應該將那些再也不顯示的View釋放掉。
  • 當viewcontroller的任何view 沒有用的時候,viewDidUnload會被調用,在這裏實現將retain 的view release,若是是retain的IBOutlet view 屬性則不要在這裏release,IBOutlet會負責release
  • 通常在這裏回收跟界面相關的資源(界面都會銷燬了,跟界面相關的資源確定不要了)
  • 當視圖控制器從內存釋放本身的方法的時候調用,用於清除那些可能已經在試圖控制器中建立的對象
12. dealloc(頁面銷燬)
13. didReceiveMemoryWarning

當應用程序接收到系統的內容警告時,就有可能調用控制器的didReceiveMemoryWarning方法。 它的默認作法是:當控制器的view不在窗口上顯示時,就會直接銷燬,而且調用viewDidUnload方法it

相關文章
相關標籤/搜索