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