iOS loadView,viewDidLoad,viewDidUnload用法

來源:互聯網
上載者:User

轉載自:www.dreamingwish.com


loadView,viewDidLoad,viewDidUnload,這三個函數到底應該怎麼用?

Google一下,全是轉載,大概內容是這樣:

  1. loadView 手動載入view
  2. viewDidLoad用於nib檔案載入後,進一步處理
  3. viewDidUnload是viewDidLoad的鏡像

參考官方文檔,我給出糾正:

一、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時有回到第一步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.