UIViewController各個方法的加載順序

加載過程:

一般情況下調用 init方法或者調用initWithNibName方法實例化UIViewController, 不管調用哪個方法都為調用initWithNibName(方法定義如下)

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

接著會調用loadView方法來生成UIViewController.view

- (void)loadView

然后調用 viewDidLoad方法

- (void)viewDidLoad

如果loadView不能生成UIViewController.view系統將會反復調用loadView及viewDidLoad方法, 并且最終調用[super loadView] 方法返回UIViewController.view

然后依次調用如下2個方法, 這2個方法也十分重要, 在UINavigationController的POP操作后有時將要顯示的UIViewController中的View并沒有釋放(也有可能釋放掉) , UIViewController將不會調用上面的三個方法(initWithNibName,loadView,viewDidLoad) 而會調用下面這2個方法

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

在iOS5.0中還添加了2個函數:

- (void)viewWillLayoutSubviews ;

- (void)viewDidLayoutSubviews;

另外如果你這樣寫:

- (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)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

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

- (void)viewDidUnload;

- (void)dealloc;

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

- (void)didReceiveMemoryWarning;

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

- (void)viewDidUnload;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • /* UIViewController is a generic controller base class th...
    DanDanC閱讀 1,862評論 0 2
  • 控制器聲明周期 加載過程:1 一般情況下調用 init方法或者調用initWithNibName方法實例化UIVi...
    七里田間的守望者閱讀 3,491評論 0 3
  • 172.簡述視圖控制器的生命周期。 1)init函數(init;initWithFrame;initWithCod...
    AlanGe閱讀 391評論 0 0
  • 27、ViewController的didReceiveMemoryWarning是在什么時候調用的?默認的操作是...
    煙雨平生花飛舞閱讀 623評論 0 1
  • 原文:Jeff又叮囑了一句:"Roberto是個意大利人,他對生活細節特別講究。你在安排晚餐的時候一定要注意,要訂...
    臨淄茂業DDM黃紅閱讀 165評論 0 0