在文檔爲loadView
,蘋果指出:什麼叫副作用[超級的loadView]
你的這種方法的自定義實現不應該調用超。
所以我嘗試在我的loadView
方法中調用[super loadView]
。沒有什麼不好的事情發生,沒有任何警告。我正在使用以編程方式創建的視圖,在loadView
中,不是來自NIB。
當我撥打[super loadView]
時會發生什麼(如果有)不好的事情?
在文檔爲loadView
,蘋果指出:什麼叫副作用[超級的loadView]
你的這種方法的自定義實現不應該調用超。
所以我嘗試在我的loadView
方法中調用[super loadView]
。沒有什麼不好的事情發生,沒有任何警告。我正在使用以編程方式創建的視圖,在loadView
中,不是來自NIB。
當我撥打[super loadView]
時會發生什麼(如果有)不好的事情?
調用[super loadView]
將導致運行loadView
的UIViewController
實現。除此之外,如果已經提供了nibName
,則這是從NIB加載視圖的方法。因此,如果你要最後調用super,它可能會覆蓋你在你自己的子類中所做的所有視圖設置。如果你先叫超級,這不會是一個問題......除非你在-awakeFromNib
或任何東西有任何代碼。
基本上,您不應該調用super
,因爲如果您以編程方式加載視圖,則超類中所做的任何工作都不是您想要保留的工作。充其量,你扔掉了一堆工作。在最壞的情況下,UIViewController
可能會在那裏設置一些狀態,從而對視圖的起源做出假設。
你不需要它,所以不要這樣做。
如果你允許我進行這個比較,就像「不要穿過紅色街道。」
有一個紅綠燈,用於建立規則不過馬路,因爲它可能是任何危險的原因。這是完全合理的,你可能穿過紅色的街道,什麼也沒有發生。
該API設置的是規則,說明你應該不是調用超級。像上面的例子一樣,結果是不確定的,取決於其他事情。沒有任何反應是完全合理的。
如果你想添加額外的子視圖到UIViewController中添加的默認視圖,那麼最好先調用'[super loadView]',以確保超級視圖在那裏,並且*然後*添加您自己的子視圖(假設IB未被使用) – bodacious 2014-08-21 14:30:05
您可以這樣做。 'UIViewController'的默認視圖只是一個普通的'UIView',所以它不會給你帶來很多,但它是可能的。你也可以在'-viewDidLoad'中加入 – 2014-08-21 19:46:57
是的 - 以前我會在viewDidLoad中添加它們,但是現在我開始更喜歡在加載視圖中這樣做,所以視圖更快建立 – bodacious 2014-08-22 08:00:27