2009-04-21 95 views
15

在Objective C中,如果您正在創建子類,並打算覆蓋超類上的方法,是否應該在子類@interface中重新聲明超類方法?例如,如果您是UIViewController的子類(例如MyViewController),並且您計劃覆蓋「viewDidLoad」,那麼您應該在MyViewController @interface聲明中包含該方法,還是僅在MyViewController.m中實現它?在我遇到的例子中,我已經看到它在兩種方式下完成(在子類接口中重新聲明方法,或者不重新聲明方法)。可能沒有任何功能差異,但最佳做法是什麼?覆蓋超類中方法的目標C子類

回答

26

我經常聲明方法,我計劃在公共頭中或至少在私人類別中覆蓋。這樣做的好處是,如果您忘記實際覆蓋該方法,您將不時得到不完整的類定義警告......這種方法時常派上用場。

至於把它放在公共標題,這是非常主觀的,可能取決於你/你的團隊的編碼風格。如果我打算徹底改變方法將要做的事情,或者如果我打算不調用超類的方法版本,我通常只在公共頭文件中重新聲明一個方法。

+12

+1這是有道理的。有個名字叫「Coco(a)」的人必須知道他在做什麼。 – 2009-04-21 00:59:31

+0

即使超類有一個實現,你會得到一個不完整的定義警告?我不知道;總是認爲聲明已經存在於超類中的方法是多餘的,無論你是否覆蓋它。 – 2012-07-07 08:57:15

5

人們經常使用頭文件作爲類的文檔(和像AutoDoc這樣的工具支持這個)。顯然,如果你遵循這個約定,唯一明智的選擇是包含重新定義的方法,這樣你就可以解釋你對它們做了什麼。否則,你的文檔不是不完整的,或者分散到地球的四個角落。

但是,如果我們只是複製粘貼聲明,我個人不喜歡重新聲明方法。這不是DRY,它不必要地膨脹你的頭。代碼越少代碼越好。