Objective C子类,它覆盖了超类中的方法

时间:2009-04-21 00:46:56

标签: objective-c override subclass

在Objective C中,如果你是子类的东西,并且计划覆盖超类的方法,你应该在你的子类@interface中重新声明超类方法吗?

例如,如果您是UIViewController的子类(例如MyViewController),并且您计划覆盖“viewDidLoad”,您是否应该在MyViewController @interface声明中包含该方法,或者只是在MyViewController.m中实现它?

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

2 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:5)

人们经常使用标题作为类的文档(以及AutoDoc支持此工具)。显然,如果您遵循该惯例,唯一明智的选择是包含重新定义的方法,以便您可以解释您对它们所做的事情。否则你的课程文件要么不完整,要么分散到地球的四个角落。

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