我有一个包含多个子类的类。
它们都覆盖了一个类方法,但我没有超类中方法的特定实现。
因为我不能在接口中声明它,但我也需要实现它(以避免调试器警告),我想知道我是否可以在超类中提供该方法的空实现。
我将方法定义添加到超类的原因是我有一个多目标项目,使用特定的重写方法考虑当前的应用程序委托:
[(GenericDelegate *)[NSApp delegate] myMethod];
感谢
答案 0 :(得分:2)
是的,这是一种完美的正常做法。实际上,它有一个名称:“模板方法”。您可以在Cocoa文档中搜索它。
您会发现Apple也会在自己的代码中偶尔使用它。 drawRect:
中的UIView
方法是第一个浮现在脑海中的方法。
所以,无论如何,是的,如果它符合你的需要,我会继续做下去。只需确保您仔细考虑,例如,协议是否不能更好地满足您的需求。
答案 1 :(得分:1)
还有其他选择。在这里查看答案/讨论:Does Objective-C have something like C++ virtual functions?
答案 2 :(得分:0)
所有方法在目标c中都是虚拟的,“纯”虚拟(如在C ++中)函数不存在,因此目标c中的等效方法需要在超类中使用空实现,只是为了使编译器警告静音(我不要我们认为还有其他办法可以这样做。没有什么不妥。此post与您的问题有关。