2009-04-21 91 views
15

在Objective C中,如果您正在创建子类,并打算覆盖超类上的方法,是否应该在子类@interface中重新声明超类方法?例如,如果您是UIViewController的子类(例如MyViewController),并且您计划覆盖“viewDidLoad”,那么您应该在MyViewController @interface声明中包含该方法,还是仅在MyViewController.m中实现它?在我遇到的例子中,我已经看到它在两种方式下完成(在子类接口中重新声明方法,或者不重新声明方法)。可能没有任何功能差异,但最佳做法是什么?覆盖超类中方法的目标C子类

回答

26

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

至于把它放在公共标题,这是非常主观的,可能取决于你/你的团队的编码风格。如果我打算彻底改变方法将要做的事情,或者如果我打算不调用超类的方法版本,我通常只在公共头文件中重新声明一个方法。

+12

+1这是有道理的。有个名字叫“Coco(a)”的人必须知道他在做什么。 – 2009-04-21 00:59:31

+0

即使超类有一个实现,你会得到一个不完整的定义警告?我不知道;总是认为声明已经存在于超类中的方法是多余的,无论你是否覆盖它。 – 2012-07-07 08:57:15

5

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

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