理解view的生命週期:
在UIViewController中,view(黑體的view指的是controller的view屬性)有兩個循環:加載和卸載循環。當程序的一部分向controller請求view的指針且view不在內存中時,view會進入加載循環,controller會將view加載入內存。
當程序接收到內存警告時,controller會嘗試卸載view,在卸載循環中,controller嘗試釋放它的view對象並返回到原始的無view狀態(當它不在屏幕上顯示時,這個條件的判斷到底是根據view的結構來還是根據用戶視覺來,我尚不清楚),直到view下次被請求。
在加載卸載循環中,controller處理的大部分邏輯。但是如果我們的controller還“持有”着view的後代view時,或者還有其他後續操作需要進行時,我們可以重載特定函數(後面會介紹到)來另行處理。
加載循環:
-
程序請求了controller的view.
-
如果view當前不在內存中,controller調用loadview函數。
-
loadView
進行如下操作: -
controller 調用
viewDidLoad
方法來執行一些加載時(加載時一詞,相對於編譯時、運行時)任務.
程序可以重載loadView
和 viewDidLoad來執行一些任務:
卸載循環:
-
程序收到內存警告.
-
每個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。
-
-
如果controller釋放了它的view, 它會調用
viewDidUnload
. .可以重載這個函數來進行額外的清理操作(不要清除view和那些加載循環中無法rebuild的數據)。
原文地址:http://www.cnblogs.com/Piosa/archive/2012/02/22/2363258.html