亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

loadView為什么不需要調用super的方法呢? 如果調用了會發生什么?

loadView為什么不需要調用super的方法呢? 如果調用了會發生什么?

iOS
飲歌長嘯 2023-04-25 19:15:44
XCode生成的代碼里loadView方法直接就是空的viewDidLoad方法有[super viewDidLoad];
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

按住Option鍵,用鼠標點一下loadView,彈出來的文檔里面解釋的非常清楚,對你所有的疑問都有回答。下面是中文的簡單翻譯,但我還是建議你讀一下文檔。

當你訪問一個ViewController的view屬性時,如果此時view的值是nil,那么,ViewController就會自動調用loadView這個方法。這個方法就會加載或者創建一個view對象,賦值給view屬性。

loadView默認做的事情是:如果此ViewController存在一個對應的nib文件,那么就加載這個nib。否則,就創建一個UIView對象。

如果你用Interface Builder來創建界面,那么不應該重載這個方法。

如果你想自己創建view對象,那么可以重載這個方法。此時你需要自己給view屬性賦值。你自定義的方法不應該調用super。如果你需要對view做一些其他的定制操作,在viewDidLoad里面去做。

=========================================

根據上面的文檔可以知道,有兩種情況:

1、如果你用了nib文件,重載這個方法就沒有太大意義。因為loadView的作用就是加載nib。如果你重載了這個方法不調用super,那么nib文件就不會被加載。如果調用了super,那么view已經加載完了,你需要做的其他事情在viewDidLoad里面做更合適。

2、如果你沒有用nib,這個方法默認就是創建一個空的view對象。如果你想自己控制view對象的創建,例如創建一個特殊尺寸的view,那么可以重載這個方法,自己創建一個UIView對象,然后指定 self.view = myView; 但這種情況也沒有必要調用super,因為反正你也不需要在super方法里面創建的view對象。如果調用了super,那么就是浪費了一些資源而已。

最后,還是建議遇到問題先看官方文檔,里面對每個方法內部是怎么實現的,重載的時候需要注意什么都說的很清楚。


查看完整回答
反對 回復 2023-04-28
  • 1 回答
  • 0 關注
  • 188 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號