加載過程:
一般情況下調用 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;