2010-01-27 92 views
4

我已經注意到其他來源的代碼,其中作者還沒有將消息添加到超級消息中,如下所示。我通常將它們加在一起,但我只是好奇它們做了什麼,我是否總是加入它們?ViewDidLoad /將消息卸載到超級?

-(void)viewDidLoad { 
    //... other code 
    [super viewDidLoad]; 
} 

-(void)viewDidUnload { 
    //... other code 
    [super viewDidUnload]; 
} 

加里

+0

編輯:我假設兩種方法也將包括其他代碼,我已經添加//...其他代碼來表示在上面的例子中。 – fuzzygoat 2010-01-27 22:34:30

+0

相關:http://stackoverflow.com/questions/844195/super-viewdidload-convention – cregox 2011-01-12 12:40:17

回答

4

我會建議總是發送UIViewController代表消息到super(例如viewDidLoad,viewDidAppear)。在某些情況下,例如,如果直接對UIViewController進行子類化,則沒有必要。

某些類,例如UITableViewController,需要子類來做到這一點,因爲it is documented:「你可以重寫loadView或任何其他的超類方法,但是如果你確實要調用該方法的超類實現,通常作爲第一個方法調用。」

super的呼叫爲超類提供了處理事件的機會(例如重新加載表數據,動畫化取消選擇按鈕等)。

不用說,你不需要一個明確的方法,其唯一的工作就是調用super。

1

這些方法的目的是通知您的控制器時,它控制的觀點已經裝載完畢,並完成卸載,萬一有事情,控制器需要在那些「有趣的實現時刻」。

您所包含的代碼基本上不做任何事情:它將消息傳遞給超類實現,而不添加任何自己的處理。但是,如果完全忽略該代碼,情況就會如此:消息將傳遞給繼承鏈中的最低類,該鏈定義了該方法的實現。

0

您不必在空實現中重寫這些方法。當你需要用ivars做一些事情時,覆蓋它,停止通知觀察等。 你的代碼沒有任何用處

0

你應該只在需要重寫某個方法時才需要執行某種操作,所以我假設你的代碼看起來真的是這樣的:

-(void)viewDidLoad { 
    //do things that need to be done when the view is loaded 
    [super viewDidLoad]; 
} 

如果你覺得家長如果您認爲需要做一些事情爲好,然後調用[超級viewDidLoad中]絕對是爲了。如果你看一下viewDidLoad中的文檔,但是,它指出

這種方法是最常用的對從筆尖文件加載

單詞「額外」的意見執行額外的初始化步驟在這裏至關重要:這只是一種方便的方法。這與dealloc形成了鮮明的對比,其中文檔明確指出,在重寫dealloc時,必須始終調用[super dealloc]。

如果你的viewDidLoad和viewDidUnload的實現實際上並沒有做其他任何事情,只是調用super,你應該刪除它們:除了爲編譯器做額外的工作之外,它們什麼都不做。