天天看點

UIViewController中loadView與viewDidLoad,viewDidUnload,dealloc知識

我在cocoachina裡看到的提問文章(http://www.cocoachina.com/bbs/read.php?tid=33608&page=1#481517),覺得自己也不是很清楚,于是去網上搜了下

stackoverflow    http://stackoverflow.com/questions/573958/iphone-sdk-what-is-the-difference-between-loadview-and-viewdidload

蘋果官網說明  http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101-SW19

通過各種翻閱...總結如下:

view有兩個重要circle

一: 加載

1.loadView 隻有在你在代碼中建立實作你的view時需要在對應UIViewController裡重寫該方法。

注意:不要super loadView以減少資源消耗.

2.viewDidLoad 無論你是否用Interface Builder建立nib檔案建立UIViewController ,這個方法都會被調用的。它是用來做一些額外在你架子啊你的view時需要做的任務。

3.如果在UIViewController裡存儲了IBOutlet,和UIView或者其子類,在viewDidUnload裡都要指派它們為nil,用self.xxx方式,因為這同時會出發setter裡的release方法。否則會有leak。

4.每一個UIViewController都會有一個view property,這是default的,在UIViewController初始化後,當程式某部分通路view時,這時如果view是沒有在記憶體中存在,view controller會調用loadView方法。

如果你重寫了loadView,你需要建立所有相關的views,并且指派view一個非nil值。

如果你沒有重寫這個方法,預設初始化方式使用view controller的nibName和nibBundle屬性來試圖從一個專有的nib檔案加載。如果沒有找到那個專有的那個nib檔案,預設會去找一個名字與view controller相比對的nib檔案去加載。

如果沒有有效的nib檔案,預設實作最後會傳回一個空view,并且指派給view這個property。

UIViewController中loadView與viewDidLoad,viewDidUnload,dealloc知識

二:解除安裝

view被解除安裝發生在程式收到系統的low memory warning。

每一個view controller都會調用自己的didReceiveMemoryWarning方法。

如果你重寫了這個方法,你需要release掉所有你的view controller不在使用的自定義資料。一定不要在這個方法裡release你view controller的view property。你必須要使用super方法來執行一些預設操作。

預設實作是隻release那些執行release操作安全的view。

如果view controller release它的view,它會調用viewDidUnload方法,你可以重寫這個方法來實作一些額外的清除你的views工作。

UIViewController中loadView與viewDidLoad,viewDidUnload,dealloc知識