2011-05-17 88 views

回答

7

你通常應該儘可能早地調用super。否則,超類可能會干擾你自己的實現。比方說,UIViewController將設置在viewDidLoad一個默認的背景色(事實並非如此):如果你願意設置自己的背景顏色在你的方法,然後調用超級,它會被重置爲默認的顏色這可能導致混亂。

+0

那麼長話短說,在第一行使用它吧? – YumYumYum 2017-02-25 09:53:55

2

你應該把它放在開頭,這樣你可以覆蓋任何東西它(因爲讓我們面對它,這就是爲什麼你在第一時間覆蓋)。或者換個角度來看,你不應該把它放在你的任何代碼之後,以免它破壞你的任何事情。希望這對你有意義!

3

絕對是。

//superclass 
-(void)viewDidLoad { 
    self.ivar = 4; 
} 

//subclass 
-(void)viewDidLoad { 
    [super viewDidLoad]; 
    self.ivar = 5; 
} 

//alternative subclass 
-(void)viewDidLoad { 
    self.ivar = 5; 
    [super viewDidLoad]; 
} 

該示例很簡單,但顯示兩個子類都從同一個超類繼承;其中一個設置它在ivar之後加載到4,另一個設置它爲ivar。5.

我試圖堅持上面說的idz,總是首先調用[super viewDidLoad];在調用[super dealloc]之前,也可以在dealloc中完成所有的釋放 - 也就是先去掉所有的混亂 - 否則就是泄漏時間。

0

該文檔實際上並不表示它是必需的,Apple的幾個示例代碼項目(例如iPhoneCoreDataRecipes)完全不會調用[ super viewDidLoad ]。與-viewWillAppear:的文件,其中明確表示比較:

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

這就是說,它不會傷害到調用它。我的習慣是立即調用它,然後繼續我的視圖設置。

+0

「文檔實際上並不表明它是必需的......」然後你張貼Apple文檔的摘錄,要求實施者在實施過程中的某個時刻調用super ...?無論如何,長話短說,你絕對應該這樣稱呼它,因爲你不知道你從這些繼承的這些類的幕後會發生什麼。 – 2017-08-04 21:35:06

相關問題