【问题标题】:Objective C subclass that overrides a method in the superclass覆盖超类中的方法的 Objective C 子类
【发布时间】:2009-04-21 00:46:56
【问题描述】:

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

例如,如果您是 UIViewController 的子类(例如 MyViewController),并且您打算重写“viewDidLoad”,您应该在 MyViewController @interface 声明中包含该方法,还是只在 MyViewController.m 中实现它?

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

【问题讨论】:

    标签: objective-c overriding subclass


    【解决方案1】:

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

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

    【讨论】:

    • +1 这是有道理的。像“Coco(a)”这样名字的人一定知道他在做什么。
    • 即使超类有实现,您也会收到不完整的定义警告?我不知道;一直认为声明一个已经存在于超类中的方法是多余的,不管你是否重写它。
    • @ranReloaded 如果您专门重新声明该方法,您只会收到警告。基本上,当您这样做时,您是在告诉编译器您计划重新实现该方法并要求它在您没有这样做时发出警告。
    • @Coco 很高兴知道这一点,谢谢。我一直认为这只是一个无操作。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2011-11-14
      • 2013-11-02
      • 2021-05-04
      • 1970-01-01
      相关资源
      最近更新 更多