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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM