关于在没有实现的情况下覆盖超类中的方法的方法

时间:2011-10-13 11:20:12

标签: objective-c

我有一个包含多个子类的类。

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

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

我将方法定义添加到超类的原因是我有一个多目标项目,使用特定的重写方法考虑当前的应用程序委托:

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

感谢

3 个答案:

答案 0 :(得分:2)

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

您会发现Apple也会在自己的代码中偶尔使用它。 drawRect:中的UIView方法是第一个浮现在脑海中的方法。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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