在Objective C中,如果您正在創建子類,並打算覆蓋超類上的方法,是否應該在子類@interface中重新聲明超類方法?例如,如果您是UIViewController的子類(例如MyViewController),並且您計劃覆蓋「viewDidLoad」,那麼您應該在MyViewController @interface聲明中包含該方法,還是僅在MyViewController.m中實現它?在我遇到的例子中,我已經看到它在兩種方式下完成(在子類接口中重新聲明方法,或者不重新聲明方法)。可能沒有任何功能差異,但最佳做法是什麼?覆蓋超類中方法的目標C子類
15
A
回答
26
我經常聲明方法,我計劃在公共頭中或至少在私人類別中覆蓋。這樣做的好處是,如果您忘記實際覆蓋該方法,您將不時得到不完整的類定義警告......這種方法時常派上用場。
至於當把它放在公共標題,這是非常主觀的,可能取決於你/你的團隊的編碼風格。如果我打算徹底改變方法將要做的事情,或者如果我打算不調用超類的方法版本,我通常只在公共頭文件中重新聲明一個方法。
5
人們經常使用頭文件作爲類的文檔(和像AutoDoc這樣的工具支持這個)。顯然,如果你遵循這個約定,唯一明智的選擇是包含重新定義的方法,這樣你就可以解釋你對它們做了什麼。否則,你的文檔不是不完整的,或者分散到地球的四個角落。
但是,如果我們只是複製粘貼聲明,我個人不喜歡重新聲明方法。這不是DRY,它不必要地膨脹你的頭。代碼越少代碼越好。
相關問題
- 1. Objective-C - 子類中的覆蓋方法
- 2. 無法在子類中覆蓋超類的方法
- 3. 如何正確覆蓋子類中Objective-C中的類方法?
- 4. Java:強制子類覆蓋超類的方法
- 5. 覆蓋java中超類'超類的方法?
- 6. 調用覆蓋方法,超類調用覆蓋方法
- 7. 如何覆蓋子類中的方法?
- 8. Java基類和子類方法覆蓋
- 9. 當子類覆蓋了一個超類方法
- 10. 覆蓋touchesBegan:錯誤 - 方法不會覆蓋超類中的任何方法
- 11. 目標C類擴展 - 如何用readwrite方法覆蓋只讀?
- 12. 方法不會覆蓋java中的超類的方法
- 13. 覆蓋裝飾的子類方法
- 14. 覆蓋子類型的方法
- 15. JavaScript的子類和方法覆蓋
- 16. 強制子類覆蓋父的方法
- 17. 覆蓋創建子類的方法
- 18. 覆蓋Child類中的ParentModel類方法
- 19. Python:在超類的未覆蓋方法中從子類訪問變量
- 20. 覆蓋在子類C#
- 21. Groovy :: @Mixin方法覆蓋目標類方法
- 22. Objective C - 覆蓋基類的方法 - 如何調用子類的方法?
- 23. 覆蓋ActiveRecord類的方法
- 24. JavaScript子類化和方法覆蓋
- 25. UICollectionView子類覆蓋選擇方法
- 26. 防止子類覆蓋方法
- 27. 如何避免子類無意中覆蓋超類私有方法
- 28. 覆蓋父類的子類
- 29. 方法不會覆蓋超類的方法
- 30. HoloEverywhere方法不會覆蓋或實現超類型的方法
+1這是有道理的。有個名字叫「Coco(a)」的人必須知道他在做什麼。 – 2009-04-21 00:59:31
即使超類有一個實現,你會得到一個不完整的定義警告?我不知道;總是認爲聲明已經存在於超類中的方法是多餘的,無論你是否覆蓋它。 – 2012-07-07 08:57:15