UIViewController各方法的調用順序

(1)init方法

在init方法中實例化必要的對象(遵從LazyLoad思想),init方法中初始化ViewController本身

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

      如果代碼中有重寫此方法,調用init方法時會默認調用這個方法。如果該方法中沒有對self.view添加子視圖,則調用順序爲該方法->控制器的屬性設置方法->viewdidload。

但是!!!如果在該方法中爲self.view添加了子視圖,則調用[self.view addSubview:whiteView]的地方會馬上去調用viewdidload方法,把viewdidload運行完,再回來繼續執行- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法的代碼。

當控制器被initWithNibName:初始化並加入到導航控制器的棧中時,它不會加載nib文件,直到nib文件被實際顯示。因此控制器在nib文件中定 義的內容,例如label,可能還沒有實例化。此時label可能只是一個nil指針,需要額外使用代碼中實現的屬性來存儲信息。

(3)loadView方法

      無論XIB還是代碼創建都會調用loadView方法,

      如果視圖控制器不是通過nib文件創建的,必須重寫該方法,給self.view賦值

如果使用IB維護views,必須不能重寫該方法,否則ib定製的視圖會被覆蓋。

(4)viewDidLoad方法

無論XIB還是代碼創建都會調用loadView方法,重寫該方法以進一步定製view。在iPhone OS 3.0及之後的版本中,還應該重載重寫viewDidUnload來釋放對view的任何索引。

(5)viewDidUnload方法

當系統內存吃緊的時候會調用該方法

內存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內存的唯一方式,但是OS 3.0以後viewDidUnload方法是更好的方式。

在該方法中將所有IBOutlet(無論是property還是實例變量)置爲nil(系統release view時已經將其release掉了)

在該方法中釋放其他與view有關的對象、其他在運行時創建(但非系統必須)的對象、在viewDidLoad中被創建的對象、緩存數據 等 release對象後,將對象置爲nil(IBOutlet只需要將其置爲nil,系統release view時已經將其release掉了)

viewDidUnload中被release的對象必須是很容易被重新創建的對象(比如在viewDidLoad或其他方法中創建的對象),不要release用戶數據或其他很難被重新創建的對象

(6)didReceiveMemoryWarning

從iOS3.0開始,不需要重載這個函數,把釋放內存的代碼放到viewDidUnload中去。

這個函數的默認實現是:檢查controller是否可以安全地釋放它的view屬性,如果view可以被釋放,那麼這個函數釋放view並調用viewDidUnload。

你可以重寫這個函數來釋放controller中使用的其他內存。但要記得調用這個函數的super方法釋放view。

(7)dealloc方法

viewDidUnload和dealloc方法沒有關聯,dealloc還是繼續做它該做的事情。當一個對象的retain值爲0時,就會調用它的方法dealloc。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章