(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。