国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【iOS】init,loadView,viewDidLoad加載關系

2019-11-14 20:00:18
字體:
來源:轉載
供稿:網友

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

---------------------------------------------------------------------------------------

 

補充一點自己碰到的問題:

1.只有在調用到self.view并且view = nil的時候,loadView,viewDidLoad才會被調用到。

2.注意初始化內容的加載順序。如果是手動加載,在loadView的時候加入自己創建的view。ViewDidLoad只對之前的已經加載的view做后續操作,在viewDidLoad之后新創建的內容是可以在內存不足時釋放的(這個問題需待測試)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰宁| 阿瓦提县| 名山县| 米林县| 泽库县| 西吉县| 扎鲁特旗| 台湾省| 长兴县| 油尖旺区| 阿拉尔市| 增城市| 青河县| 美姑县| 牙克石市| 开阳县| 恩施市| 连城县| 蕲春县| 蓬溪县| 新沂市| 凤翔县| 洞头县| 祁阳县| 西青区| 宝坻区| 巴塘县| 商城县| 宁波市| 九江市| 江油市| 象州县| 普宁市| 隆安县| 临江市| 亚东县| 阜阳市| 永兴县| 崇阳县| 七台河市| 广丰县|