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

And*_*ite 15 overriding subclass objective-c

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

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

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

Jas*_*oco 26

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

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

  • +1这是有道理的.名字如"Coco(a)"的人必须知道他在做什么. (12认同)

Chu*_*uck 5

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

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