2011-04-12 63 views

回答

5

通過使用super您正在調用方法的基類版本。您會在init,dealloc,viewDidLoad等方法中看到類似的呼叫。原因是在基類的實現中可能會執行一些重要的事情,否則派生類將無法正常工作。當您重寫派生類中的方法時,您需要使用super撥打基本版本。

當你知道你不需要基類所執行的任務時,換句話說你完全覆蓋了,唯一不會調用基類的方法的方法是使用super。這不是viewWillAppear:animatedviewDidLoad等情況。所以我們總是在這些情況下稱爲超級。

2

reference明確指出

這種方法被稱爲前 接收機的觀點是關於要顯示 屏幕上和之前的任何 動畫被配置用於示出 視圖。您可以覆蓋此方法 以執行與呈現視圖關聯的定製任務 。例如,您可以使用此方法將 欄的方向或樣式更改爲 欄,以與方向 或所呈現視圖的樣式相協調。 如果您重寫此方法,則必須在您的 實施中的某個時間點呼叫超級呼叫 。

2

蘋果的viewWillAppear中的文件:只是說:

如果重寫此方法,您必須在您執行某些時候調用超。

如果你不叫它,它可能會導致一些意想不到的行爲。請注意,「在某個時刻」意味着您不必先打電話。

+0

如果沒有超級調用,只有您自己的視圖控制器實現中的自定義功能會被執行。不會執行繼承層次更高的任何功能。即viewwillAppear:動畫:它位於UIViewController中,implimentation不會被執行。 – Sabobin 2011-04-12 08:54:35

+0

如果一直沒有調用super,那麼超類方法將永遠不會被調用;我認爲這很明顯。然而,問題是超級的viewWillAppear的實現是否足夠重要,以至於它保證了超級的呼叫。我認爲答案有時是有的,有時並非如此。例如,如果您繼承UINavigationController而不是UIViewController,則它可能很重要。爲了安全起見,請始終使用它。 – vakio 2011-04-12 09:27:11