loadView,viewDidLoad,viewDidUnload,這三個函數到底應該怎麼用?
搜索一下,全是轉載,大概內容是這樣:
參考官方文檔,我給出糾正:
一、loadView
永遠不要主動調用這個函數。view controller會在view的property被請求並且當前view值為nil時調用這個函數。如果你手動創建view,你應該重載這個函數。如果你用IB創建view並初始化view controller,那就意味著你使用initWithNibName:bundle:方法,這時,你不應該重載loadView函數。
這個方法的默認實現是這樣:先尋找有關可用的nib文件的信息,根據這個信息來加載nib文件,如果沒有有關nib文件的信息,默認實現會創建一個空白的UIView對象,然後讓這個對象成為controller的主view。
所以,重載這個函數時,你也應該這麼做。並把子類的view賦給view屬性(property)(你create的view必須是唯一的實例,並且不被其他任何controller共享),而且你重載的這個函數不應該調用super。
如果你要進行進一步初始化你的views,你應該在viewDidLoad函數中去做。在IOS 3.0以及更高版本中,你應該重載viewDidUnload函數來釋放任何對view的引用或者它裡面的內容(子view等等)。
這個網上的資料都說的很不全面,尤其是藍色字部分。
二、viewDidLoad
這個函數在controller加載了相關的views後被調用,而不論這些views存儲在nib文件裡還是在loadView函數中生成。而多數情況下是做nib文件的後續工作。
網上資料對這個函數的描述則完全不對。
三、viewDidUnload
這個函數是viewDidLoad的對立函數。在程序內存欠缺時,這個函數被controller調用()。由於controller通常保存著與view(這裡黑體的view指controller的view屬性)相關的對象(一般是view的子view)或者其他運行時創建的對象的引用,所以你必須使用這個函數來放棄這些對象的所有權以便內存回收。但不要釋放那些難以重建的數據(不要在這個函數中釋放view)。
通常controller會保存nib文件建立的views的引用,但是也可能會保存著loadView函數創建的對象的引用。最完美的方法是使用合成器方法:
self.myCertainView = nil;
這樣合成器會release這個view,如果你沒有使用property,那麼你得自己顯式釋放這個view。
網上對這個函數的描述含含糊糊,看了等於沒看。
另外:如果controller存儲了其他object和view的引用,你還得在dealloc方法中釋放這些內存。對於IOS2.x,你還必須在調用super dealloc方法前將這些引用置為nil。
四、結論
所以流程應該是這樣:
(loadView/nib文件)來加載view到內存 ——>viewDidLoad函數進一步初始化這些view ——>內存不足時,調用viewDidUnload函數釋放views
—->當需要使用view時有回到第一步
如此循環
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
[db:作者簡介][db:原文翻譯及解析]【IOS 中loadView,viewDidLoad,viewDidUnload詳解及使用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!