可能重複:
[super viewDidLoad] convention它在我的UIViewController中放置[super viewDidLoad]有什麼區別嗎?
它使一個區別在哪裏我把[super viewDidLoad]
在我的UIViewController的viewDidLoad
內?也就是說,它應該在開始時(在我的代碼設置UIViewController之前)還是在我的代碼設置UIViewController之後),還是它沒有什麼區別?
可能重複:
[super viewDidLoad] convention它在我的UIViewController中放置[super viewDidLoad]有什麼區別嗎?
它使一個區別在哪裏我把[super viewDidLoad]
在我的UIViewController的viewDidLoad
內?也就是說,它應該在開始時(在我的代碼設置UIViewController之前)還是在我的代碼設置UIViewController之後),還是它沒有什麼區別?
你通常應該儘可能早地調用super。否則,超類可能會干擾你自己的實現。比方說,UIViewController
將設置在viewDidLoad
一個默認的背景色(事實並非如此):如果你願意設置自己的背景顏色在你的方法,然後調用超級,它會被重置爲默認的顏色這可能導致混亂。
你應該把它放在開頭,這樣你可以覆蓋任何東西它(因爲讓我們面對它,這就是爲什麼你在第一時間覆蓋)。或者換個角度來看,你不應該把它放在你的任何代碼之後,以免它破壞你的任何事情。希望這對你有意義!
絕對是。
//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中完成所有的釋放 - 也就是先去掉所有的混亂 - 否則就是泄漏時間。
該文檔實際上並不表示它是必需的,Apple的幾個示例代碼項目(例如iPhoneCoreDataRecipes)完全不會調用[ super viewDidLoad ]
。與-viewWillAppear:
的文件,其中明確表示比較:
如果重寫此方法,您必須在您執行某些時候調用超。
這就是說,它不會傷害到調用它。我的習慣是立即調用它,然後繼續我的視圖設置。
「文檔實際上並不表明它是必需的......」然後你張貼Apple文檔的摘錄,要求實施者在實施過程中的某個時刻調用super ...?無論如何,長話短說,你絕對應該這樣稱呼它,因爲你不知道你從這些繼承的這些類的幕後會發生什麼。 – 2017-08-04 21:35:06
那麼長話短說,在第一行使用它吧? – YumYumYum 2017-02-25 09:53:55