view在UIViewController中的生命周期


理解view的生命周期:

在UIViewController中,view(黑體的view指的是controller的view屬性)有兩個循環:加載和卸載循環。當程序的一部分向controller請求view的指針且view不在內存中時,view會進入加載循環,controller會將view加載入內存。

當程序接收到內存警告時,controller會嘗試卸載view,在卸載循環中,controller嘗試釋放它的view對象並返回到原始的無view狀態(當它不在屏幕上顯示時,這個條件的判斷到底是根據view的結構來還是根據用戶視覺來,我尚不清楚),直到view下次被請求。

在加載卸載循環中,controller處理的大部分邏輯。但是如果我們的controller還“持有”着view的后代view時,或者還有其他后續操作需要進行時,我們可以重載特定函數(后面會介紹到)來另行處理。

加載循環:

  1. 程序請求了controller的view.

  2. 如果view當前不在內存中,controller調用loadview函數。

  3. loadView 進行如下操作:

    • 如果你重載了這個函數,你應該自己創建必要的views並且將一個非nil值賦給view屬性

    • 如果你沒有重載這個函數,默認實現會使用controller的nibName 和 nibBundle屬性來嘗試從nib文件加載view。如果沒有找到nib文件,它嘗試尋找一個與view controller類名匹配(viewControllerClassName.nib)的nib文件。

    • 如果沒有可用的nib文件,那么它創建一個空的UIView作為它的view

  4.  controller 調用  viewDidLoad 方法來執行一些加載時(加載時一詞,相對於編譯時、運行時)任務.

程序可以重載loadView 和 viewDidLoad來執行一些任務:

卸載循環:

  1. 程序收到內存警告.

  2. 每個view controller調用 didReceiveMemoryWarning:

    • If you override this method, you should use it to release any custom data that your view controller object no longer needs. You should not use it to release your view controller’s view. You must call super at some point in your implementation to perform the default behavior.(iOS3.0以后不建議重載這個函數來進行額外的清除操作,使用viewDidUnload)

    • 默認實現會在確定可以安全地釋放view時釋放掉view

  3. 如果controller釋放了它的view, 它會調用 viewDidUnload. .可以重載這個函數來進行額外的清理操作(不要清除view和那些加載循環中無法rebuild的數據)。

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM