init-初始化程序
viewDidLoad-加載視圖
viewWillAppear-UIViewController對象的視圖即將加入窗口時調用;
viewDidApper-UIViewController對象的視圖已經加入到窗口時調用;
viewWillDisappear-UIViewController對象的視圖即將消失、被覆蓋或是隱藏時調用;
viewDidDisappear-UIViewController對象的視圖已經消失、被覆蓋或是隱藏時調用;
viewVillUnload-當內存過低時,需要釋放一些不需要使用的視圖時,即將釋放時調用;
viewDidUnload-當內存過低,釋放一些不需要的視圖時調用。
?
比如如下代碼:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{ // Custom initialization
UITabBarItem?*tbi = [self tabBarItem];
[tbi setTitle:@"CurrentTime"];
[[self view ] setBackgroundColor:[UIColor yellowColor]];
}
return self;
}
?
我們將UIViewController的init方法中訪問的實例變量view在init中將背景設置為黃.色,運行程序,我們能發現背景的確變成了黃.色,但是,在我們還沒有需要使用視圖的時候,該視圖已經加載好了,在UIViewController的初始方法中訪問實例變量view,會導致延遲載入機制失效,這個問題看上去不是很嚴重,但是如果考慮到內存過低警告,那么問題就大了。。。
??
運行程序,選擇模擬器中的硬件->模擬內存過低警告,我們會發現,原本設置的黃.色背景不見了,這是因為,內存過低,視圖控制對象會在發出內存過低警告時收到didReceiveMemoryWarning消息,該方法默認實現,檢查視圖控制對象的視圖是否可見,如果不可見,則釋放掉,下次在加載該視圖時就不會執行init方法,而是只執行viewDidLoad方法,所以需要將[[selfview?]?setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,這樣如果視圖因為內存過低被釋放掉了,下次需要使用到該視圖的時候,程序會默認取執行該視圖的viewDidLoad方法,這樣背景顏色就又出來了。