UIViewController生命週期

 加載過程

加載第一步
     - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
   //根據nib文件實例化UIViewController
   // 這個方法是在controller的類在IB中建立,可是經過Xcode實例化controller的時候用的.

//若是你的對象是UIViewControler的子類,那麼你必須調用- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;方法去調用NIB文件初始化自身,即便那沒有使用nib文件也會調用這個函數(默認 狀況下init方法已經爲你的作這件事情了),若是你調用這個方法,並傳遞的兩個參數爲空(nil),而後類會調用-loadView去讀取一個名字和你 的UIViewController名字相同的nib文件,來初始化自身。若是沒有這樣的nib文件,你必須調用-setView:來設置一個 self.view。或者重載-loadView 方法

 加載第二步
    - (void)loadView 

   當view須要被展現而它倒是nil時,viewController會調用該方法。不要直接調用該方法。html

   若是手工維護views,必須重載重寫該方法數據結構

   若是使用IB維護views,必須不能重載重寫該方法app

   loadView和IB構建view函數

   做用:在須要用程序自定義view時從新,其餘狀況能夠不用考慮spa



 加載第三步
    - (void)viewDidLoad
   //若是loadView不能生成UIViewController.view系統將會反覆調用loadView及viewDidLoad方法, 而且最終調用[super loadView] 方法返回UIViewController.view

//重載重寫該方法以進一步定製view

//在iPhone OS 3.0及以後的版本中,還應該重載重寫viewDidUnload來釋放對view的任何索引code

//viewDidLoad後調用數據Modelhtm

//在視圖加載後被調用,若是是在代碼中建立的視圖加載器,他將會在loadView方法後被調用,對象

//若是是從nib視圖頁面輸出,他將會在視圖設置好後後被調用。blog

 

做用:分配和載入在視圖顯示時所須要的數據索引

通常狀況下,數據對象是經過配置view controller的屬性來提供的,view controller須要的一些額外的數據應該經過重寫viewDidLoad函數來提供。


 加載第四步

   - (void)viewWillAppear:(BOOL)animated;

  //視圖即將可見時調用。默認狀況下不執行任何操做

 加載第五步

   - (void)viewDidAppear:(BOOL)animated;

 //視圖已徹底過渡到屏幕上時調用

另外若是你這樣寫:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

if (self) {

UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.view = view;

[view release];

// Custom initialization

NSLog(@」initWithNibName」);

}

return self;

}

那麼loadView和viewDidLoad 方法將不會被調用

  - (void)viewWillLayoutSubviews ;

  - (void)viewDidLayoutSubviews;

 

卸載過程

卸載第一步

- (void)viewWillDisappear:(BOOL)animated;

//意思是在視圖將要釋放前調用該函數

卸載第二步

- (void)viewDidDisappear:(BOOL)animated;

//viewDidDisappear意思是在視圖釋放時調用。

卸載第三步

- (void)viewWillUnload;//iOS5.0添加

做用:釋放顯示視圖時所須要的不難重建的數據

卸載第四步

- (void)viewDidUnload;

//當系統內存吃緊的時候會調用該方法(注:viewController沒有被dealloc)

//當視圖再也不顯示時釋放那些不須要的數據。

做用:釋放視圖對象的引用和顯示視圖時所須要的不難重建的數據

//可使用viewDidUnload函數釋放視圖擁有的全部數據,固然這些數據在視圖從新載入內存時可以很容易從新//建立。
//若是重建這些數據很消耗時間,那麼沒必要在viewDidUnload函數中釋放這些數據,能夠考慮在//didReceiveMemoryWarning函數釋放這些數據對象

卸載第五步

- (void)didReceiveMemoryWarning;

//釋放在viewDidUnload函數中沒有釋放的數據(重建耗時的數據)

卸載第六步

- (void)dealloc;

//viewController最後的清理工做,釋放視圖對象的引用和viewController所需數據結構

 

 

PS: 當程序收到內存不足的警告後, 程序內存中的全部的UIViewController都將會收到didReceiveMemoryWarning調用消息. 目的是將當前不顯示的UIViewController中的view釋放掉(不會調用UIViewController的dealloc方法), 因此當該UIViewController再次顯示的時候又要生成一次, 此時它會調用loadView-> viewDidLoad ->viewWillAppear等, 這時最容易形成內存泄漏!

- (void)didReceiveMemoryWarning;

- (void)viewWillUnload;//iOS5.0添加

- (void)viewDidUnload;

轉載:http://blog.sina.com.cn/s/blog_74f70b7901017gbn.html

相關文章
相關標籤/搜索