理解view的生命周期: 在UIViewController中,,view(黑體的view指的是controller的view屬性)有兩個循環(huán):加載和卸載循環(huán)。當(dāng)程序的一部分向controller請求view的指針且view不在內(nèi)存中時,,view會進(jìn)入加載循環(huán),,controller會將view加載入內(nèi)存。 當(dāng)程序接收到內(nèi)存警告時,,controller會嘗試卸載view,在卸載循環(huán)中,,controller嘗試釋放它的view對象并返回到原始的無view狀態(tài)(當(dāng)它不在屏幕上顯示時,這個條件的判斷到底是根據(jù)view的結(jié)構(gòu)來還是根據(jù)用戶視覺來,,我尚不清楚),直到view下次被請求,。 在加載卸載循環(huán)中,,controller處理的大部分邏輯,。但是如果我們的controller還“持有”著view的后代view時,或者還有其他后續(xù)操作需要進(jìn)行時,,我們可以重載特定函數(shù)(后面會介紹到)來另行處理,。 加載循環(huán): 程序請求了controller的view. 如果view當(dāng)前不在內(nèi)存中,controller調(diào)用loadview函數(shù),。 loadView 進(jìn)行如下操作:
如果你重載了這個函數(shù),,你應(yīng)該自己創(chuàng)建必要的views并且將一個非nil值賦給view屬性 如果你沒有重載這個函數(shù),默認(rèn)實現(xiàn)會使用controller的nibName 和 nibBundle屬性來嘗試從nib文件加載view,。如果沒有找到nib文件,,它嘗試尋找一個與view controller類名匹配(viewControllerClassName.nib)的nib文件。 如果沒有可用的nib文件,,那么它創(chuàng)建一個空的UIView作為它的view,。
controller 調(diào)用 viewDidLoad 方法來執(zhí)行一些加載時(加載時一詞,相對于編譯時,、運(yùn)行時)任務(wù).
程序可以重載loadView 和 viewDidLoad來執(zhí)行一些任務(wù): 卸載循環(huán): 程序收到內(nèi)存警告. 每個view controller調(diào)用 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以后不建議重載這個函數(shù)來進(jìn)行額外的清除操作,,使用viewDidUnload) 默認(rèn)實現(xiàn)會在確定可以安全地釋放view時釋放掉view。
如果controller釋放了它的view, 它會調(diào)用 viewDidUnload . .可以重載這個函數(shù)來進(jìn)行額外的清理操作(不要清除view和那些加載循環(huán)中無法rebuild的數(shù)據(jù)),。
|