模仿'virtual-functions'的Objective-C协议会产生编译器警告?

时间:2009-09-16 21:19:33

标签: objective-c polymorphism protocols virtual-functions

在Objective-C中,我想强制派生类实现给定的接口,而不提供默认实现(父类中的实现)。

我明白协议可以用于此,我相信我理解如何使用协议,但我显然错过了一些东西......

我定义了类Parent,并从父派生了几个Child类。 所有Child类都符合需要实现myMethod的协议。

我想遍历Child实例,通过超类Parent引用它们,在每个实例上调用myMethod。

编译器 - 毫不奇怪 - 警告父母可能不会回复myMethod。

所有证据都表明myMethod事实上会被调用每个派生的Child实例,但是我收到警告这一事实让我感到不安,并暗示我没有正确实现这一点。

我错过了什么?

由于

2 个答案:

答案 0 :(得分:3)

这不是协议的使用方式。协议没有实现的接口。如果一个类声称符合协议(如您的父类显然那样),则需要实现这些方法,否则您将收到警告。你想要做的是让所有实际实现协议的类声明它们符合它,而不是通过这个父类名称引用它们,将它们称为id<ProtocolNameHere>。这声明它们是符合该协议的对象。

答案 1 :(得分:2)

我注意到对协议以及它们的工作方式很感兴趣。不幸的是,有很多关于它们的误导性教程。

查看我的教程 Inheritance or Protocols? ,了解协议如何工作,以及何时使用它们而不是继承。其中包括大量的示例代码,以及如何使用协议而不是类别作为其他语言的抽象类的Objective-C类似物的讨论。祝你的发展好运!

相关问题