15

在Objective C中,如果你正在继承一些东西,并且打算覆盖超类上的方法,你应该在你的子类@interface中重新声明超类方法吗?

例如,如果您正在继承 UIViewController(例如 MyViewController),并且您计划覆盖“viewDidLoad”,您应该在 MyViewController @interface 声明中包含该方法,还是只在 MyViewController.m 中实现它?

在我遇到的示例中,我已经看到它以两种方式完成(在子类接口中重新声明该方法,或者不重新声明该方法)。可能没有任何功能差异,但最佳实践是什么?

4

2 回答 2

26

我经常在公共标头或至少在私有类别中声明我计划覆盖的方法。这样做的好处是,如果您忘记实际覆盖该方法,您将收到一个不完整的类定义警告......这有时会派上用场。

至于何时将其放在公共标头中,这是非常主观的,可能取决于您/您的团队的编码风格。如果我打算从根本上改变方法将要做什么,或者如果我打算不调用超类的方法版本,我通常只在公共标头中重新声明一个方法。

于 2009-04-21T00:55:57.377 回答
5

人们经常使用标题作为类的文档(AutoDoc 等工具支持这一点)。显然,如果您遵循该约定,唯一明智的选择是包含重新定义的方法,这样您就可以解释您对它们做了什么。否则,您的课程文档要么不完整,要么分散到地球的四个角落。

但是如果我们只是复制粘贴声明,我个人不喜欢重新声明方法。它不是DRY,它会不必要地膨胀你的标题。更少的代码是更好的代码。

于 2009-04-21T01:25:20.830 回答