有關view載入涉及到的幾個方法

2021-06-30 16:05:37 字數 2759 閱讀 9173

參考:

關於view載入的過程,包括loadview,viewwillunload,viewdidunload,viewdidload,isviewload等,下面一一會講解

loadview

1.什麼時候被呼叫?

每次訪問uiviewcontroller的view(比如controller.view,self.view)而且view為nil,loadview方法就會被呼叫

2.有什麼作用?

loadview方法是用來負責建立uiviewcontroller的view

3.預設實現是怎樣的?

預設實現即[super loadview]裡面做了什麼事情

1>它會先去查詢與uiviewcontroller相關聯的xib檔案,通重載入xib檔案來建立uiviewcontroller的view

如果在初始化uiviewcontroller指定了xib檔名,就會根據載入的xib檔名載入對應的xib檔案

[[mjviewcontroller alloc]initwithnibname:@"mjviewcontroller" bundle:nil];

如果沒有明顯的傳xib檔名,就回家再跟uiviewcontroller同名的xib檔案

[[mjviewcontroller alloc]init];//載入mjviewcontroller.xib

2>如果沒有找到相關聯的xib的檔案,就會建立乙個空白的uiview,然後賦值給uiviewcontroller的view屬性,大致如下

4.怎樣正確使用這個方法

大家都知道uiviewcontroller的view可以通過xib檔案來建立,但在某些情況下,xib不是那麼地靈活,所以有時候我們想通過**來建立uiview

如果想通過**來建立uiviewcontroller的view,就要重寫loadview方法,並且不需要呼叫[super loadview],因為在第三點裡面已經提到:如果沒有xib檔案[super loadview]缺省會建立乙個空白uiview。我麼既然要通過**來自定義uiview,那麼就沒必要建立乙個空白的uiview,以節省不必要的開銷。正確的做法應該是:

-(void)loadview{

不需要呼叫[super loadview],呼叫也沒有錯,只是造成了一些不必要的開銷

總結一句話,蘋果設計這個方法就是給我們自定義uiviewcontroller的view用的

viewdidload

1.什麼時候被呼叫?

無論你是通過xib檔案還是重寫loadview方法建立uiviewcontrolle的view,在view建立完畢後,最終都會呼叫viewdidload方法

2.有什麼作用?

一般我們會在這裡面做介面上的初始化操作,比如往view中新增一些子檢視、從資料庫或者網路載入模型資料裝配到子檢視中。

-(void)viewdidload{

[super viewdidload];

//新增乙個按鈕

uibutton *button = [uibutton buttonwithtype:uibuttontypecontactadd];

[button addtarget:self action:@selector(click) forcontroleventtouchupinside];

[self.view addsubview:button];

viewdidunload

1.什麼時候被呼叫?

ios裝置的記憶體是及其有限的,如果應用程式占用的記憶體過多的話,系統就會對應用程式發出記憶體警告。uiviewcontroller就會收到didreceivememorywarning訊息。

didreceivememorywarning方法的預設實現是:如果當前uiviewcontroller的view不在應用程式的檢視層次結構(view hierarchy)中,即view的superview為nil的時候。

就會將view釋放,並且呼叫viewdidunload方法。

2.有什麼用?

上面說到,發出記憶體警告且view被釋放的時候就會呼叫viewdidunload方法,所以一般在釋放資源,主要是釋放介面元素相關的資源,將相關的例項都賦值為nil

-(void)viewdidunload{

[super viewdidunload];

self.name = nil;

self.pwd = nil;

3.dealloc也是用來釋放資源的,那跟viewdidunload有什麼關係?

當發出記憶體警告呼叫viewdidunload方法時,只是釋放了view,並沒有釋放uiviewcontroller,所以並不會呼叫dealloc方法,即viewdidunload和dealloc方法並沒有任何關係,dealloc方法只會在uiviewcontroller被釋放的時候呼叫

三個方法的關係

1.第一次訪問uiviewcontroller的view時,view為nil,然後就會呼叫loadview方法建立view

2.view建立完畢後會呼叫viewdidload方法進行介面元素的初始化

3.當記憶體警告時,系統可能會釋放uiviewcontroller的view,將view賦值為nil,並且呼叫viewdidunload方法

4.當再次訪問uiviewcontroller的view時,view已經在3中被賦值為nil,所以又會呼叫loadview方法建立view

5.view被重新建立完畢後,還是呼叫viewdidload方法進行介面元素的初始化

discuz涉及到的問題

其中 設定創始人 config global.php 修改 config admincp founder 1,511314 其中門戶管理中同步登陸 在discuz panel修改 construct將tbl common admincp session表中的 errorcount置為 1 panel...

微控制器開發涉及到的幾個概念

1.什麼是 dsp中的 內部上拉 和 內部下拉 dsp中介紹引腳時,註明pu,pd說是 內部上拉 和 內部下拉 就是說內部已經配置了接電源的 上拉電阻或是接地的下拉電阻。這樣,當作 為輸入埠連線oc或 coms 晶元或浮空時。訊號線平 是確定的高 低電 平。而不是不確定的浮地電平。內部上拉,相當於輸...

專案管理涉及到的文件

業務聯絡函 業務需求說明書 立項報告 立項評審報告 專案實施方案 專案組通訊錄 專案計畫與執 況跟蹤 需求規格說明書 系統介面規格說明書 總體設計 系統建設整體解決方案 軟體配置管理計畫 軟體質量保證計畫 編碼規範 源 sit測試報告和測試用例 uat測試報告和測試用例 效能測試方案與報告 上線實施...