2009-06-17 203 views
6

如果我首先調用超類的方法,或者最後調用這個方法有什麼關係?例如是否在ObjectiveC中調用超類問題的方法?

-(void)didReceiveMemoryWarning { 
    /* do a bunch of stuff */ 

    [super didReceiveMemoryWarning]; 
} 

-(void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

    /* do a bunch of stuff */ 
} 

其他方法,如viewWillAppear中,willRotateToInterfaceOrientation等同樣的問題

我尋找有意義的差異,不只是風格,或哲學(雖然這些都是值得歡迎太)。

回答

6

典型可可約定:

  1. 如果您正在執行建立,呼叫 中超第一
  2. 如果您正在執行 拆解,致電超級LAST

因此,初始化,viewDidLoad等屬於第一種情況。內存警告,viewDidUnload和dealloc屬於第二種情況。

您還應該設計您的課程以遵循此約定。任何偏差應特別注意。

相關SO回答:

`[super viewDidLoad]` convention


補充: 的理由調用安裝過程中的超級第一​​,是要確保一切都在你的地方擴展功能之前。推論是,當你釋放時,你不希望任何你的子類中的超類ivars依賴在你有機會處理它們之前得到處理。

這對引用UI更新以及下面的註釋中提到的有意義。

+0

您如何對該評估中的willRotateToInterfaceOrientation進行分類? – fnCzar 2009-06-17 20:32:06

6

它取決於功能,你可能想要在超類完成它的事情之後或之前做某件事。

例如,如果超類擁有一些UI元素,並且對其進行擴展,並且您的類將包含更多的UI元素。要獲得適合整個對象的大小,您可能會調用超類來計算其元素的大小,然後將該大小添加到您添加的元素的大小。

否則就沒有任何意義了 - 超類沒有意識到你的元素,所以它會覆蓋你的計算。這又取決於實施。

還有的地方,你需要調用父類方法作爲最後一件事具體情況:

-(void)dealloc 
{ 
    ... 
    [super dealloc]; 
}