2013-02-27 70 views
4

在文檔爲loadView,蘋果指出:什麼叫副作用[超級的loadView]

你的這種方法的自定義實現不應該調用超。

所以我嘗試在我的loadView方法中調用[super loadView]。沒有什麼不好的事情發生,沒有任何警告。我正在使用以編程方式創建的視圖,在loadView中,不是來自NIB。

當我撥打[super loadView]時會發生什麼(如果有)不好的事情?

回答

5

調用[super loadView]將導致運行loadViewUIViewController實現。除此之外,如果已經提供了nibName,則這是從NIB加載視圖的方法。因此,如果你要最後調用super,它可能會覆蓋你在你自己的子類中所做的所有視圖設置。如果你先叫超級,這不會是一個問題......除非你在-awakeFromNib或任何東西有任何代碼。

基本上,您不應該調用super,因爲如果您以編程方式加載視圖,則超類中所做的任何工作都不是您想要保留的工作。充其量,你扔掉了一堆工作。在最壞的情況下,UIViewController可能會在那裏設置一些狀態,從而對視圖的起源做出假設。

你不需要它,所以不要這樣做。

+0

如果你想添加額外的子視圖到UIViewController中添加的默認視圖,那麼最好先調用'[super loadView]',以確保超級視圖在那裏,並且*然後*添加您自己的子視圖(假設IB未被使用) – bodacious 2014-08-21 14:30:05

+0

您可以這樣做。 'UIViewController'的默認視圖只是一個普通的'UIView',所以它不會給你帶來很多,但它是可能的。你也可以在'-viewDidLoad'中加入 – 2014-08-21 19:46:57

+0

是的 - 以前我會在viewDidLoad中添加它們,但是現在我開始更喜歡在加載視圖中這樣做,所以視圖更快建立 – bodacious 2014-08-22 08:00:27

1

如果你允許我進行這個比較,就像「不要穿過紅色街道。」

有一個紅綠燈,用於建立規則過馬路,因爲它可能任何危險的原因。這是完全合理的,你可能穿過紅色的街道,什麼也沒有發生。

該API設置的是規則,說明你應該不是調用超級。像上面的例子一樣,結果是不確定的,取決於其他事情。沒有任何反應是完全合理的。

相關問題