【问题标题】:About methods overriding a method in the superclass without implementation关于覆盖超类中的方法而不实现的方法
【发布时间】:2011-10-13 11:20:12
【问题描述】:

我有一个有几个子类的类。

它们都覆盖了一个类方法,但我没有超类中方法的具体实现。

由于我不能只在接口中声明它,但我还需要实现它(以避免调试器警告),我想知道是否可以只在超类中提供该方法的空实现。

我将方法定义添加到超类的原因是我有一个多目标项目,当前应用程序委托被认为具有特定的覆盖方法:

[(GenericDelegate *)[NSApp delegate] myMethod];

谢谢

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    是的,这是一个完美的正常做法。事实上,它有一个名字:“模板方法”。您可以在 Cocoa 文档中搜索。

    您会发现 Apple 有时也会在自己的代码中这样做。第一个想到的是UIView 中的drawRect: 方法。

    所以,无论如何,是的,如果它符合您的需求,我会继续这样做。只需确保您仔细考虑,例如,协议是否不能更好地满足您的需求。

    【讨论】:

      【解决方案2】:

      还有其他选择。在这里查看答案/讨论:Does Objective-C have something like C++ virtual functions?

      【讨论】:

        【解决方案3】:

        所有方法在目标 c 中都是虚拟的,“纯”虚拟(如在 C++ 中)函数不存在,因此目标 c 中的等效方法需要在超类中空实现,只是为了使编译器警告静音(我不'认为没有其他方法可以这样做)。没有什么不妥。此post 与您的问题有关。

        【讨论】:

          猜你喜欢
          • 2015-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-16
          相关资源
          最近更新 更多