你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS視圖控制對象生命周期

iOS視圖控制對象生命周期

編輯:IOS開發綜合

 

 

-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的區別及用途

 

 

init-初始化程序

viewDidLoad-加載視圖

viewWillAppear-UIViewController對象的視圖即將加入窗口時調用;

viewDidApper-UIViewController對象的視圖已經加入到窗口時調用;

viewWillDisappear-UIViewController對象的視圖即將消失、被覆蓋或是隱藏時調用;

viewDidDisappear-UIViewController對象的視圖已經消失、被覆蓋或是隱藏時調用;

viewVillUnload-當內存過低時,需要釋放一些不需要使用的視圖時,即將釋放時調用;

viewDidUnload-當內存過低,釋放一些不需要的視圖時調用。

 

視圖控制對象通過alloc和init來創建,但是視圖控制對象不會在創建的那一刻就馬上創建相應的視圖,而是等到需要使用的時候才通過調用loadView來創建,這樣的做法能提高內存的使用率。比如,當某個標簽有很多UIViewController對象,那麼對於任何一個UIViewController對象的視圖,只有相應的標簽被選中時才會被創建出來。

 

比如如下代碼:

[plain]  
  1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  2. {
  3. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  4. if (self) {
  5. // Custom initialization
  6. UITabBarItem *tbi = [self tabBarItem];
  7. [tbi setTitle:@CurrentTime];
  8. [[self view ] setBackgroundColor:[UIColor yellowColor]];
  9. }
  10. return self;
  11. }

    我們將UIViewController的init方法中訪問的實例變量view在init中將背景設置為黃色,運行程序,我們能發現背景的確變成了黃色,但是,在我們還沒有需要使用視圖的時候,該視圖已經加載好了,在UIViewController的初始方法中訪問實例變量view,會導致延遲載入機制失效,這個問題看上去不是很嚴重,但是如果考慮到內存過低警告,那麼問題就大了。。。

     

    運行程序,選擇模擬器中的硬件->模擬內存過低警告,我們會發現,原本設置的黃色背景不見了,這是因為,內存過低,視圖控制對象會在發出內存過低警告時收到didReceiveMemoryWarning消息,該方法默認實現,檢查視圖控制對象的視圖是否可見,如果不可見,則釋放掉,下次在加載該視圖時就不會執行init方法,而是只執行viewDidLoad方法,所以需要將[[selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,這樣如果視圖因為內存過低被釋放掉了,下次需要使用到該視圖的時候,程序會默認取執行該視圖的viewDidLoad方法,這樣背景顏色就又出來了。

     

    init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的執行順序:

    從程序的log來看:

    2012-10-19 15:51:44.811inHyron[483:b903] init

    2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad

    2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear

    2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear

    很明顯,先執行init、然後執行viewDidLoad,然後是viewWillAppear最後是viewDidAppear,這樣視圖就創建好了,當視圖消失或者被覆蓋的時候:

    2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear

    2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear

    這樣一來視圖就消失了,當模擬內存警告的時候:

    2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.

    2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload

    2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload

    從log可以看出,當視圖控制對象收到內存警告的時候,程序會執行viewWillUnload最後是執行viewDidUnload。

     

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved