2

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

我知道可以为此使用协议,并且我相信我了解如何使用协议,但我显然遗漏了一些东西......

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

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

编译器 - 毫不奇怪 - 警告 Parent 可能不会响应 myMethod。

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

我错过了什么?

谢谢

4

2 回答 2

3

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

于 2009-09-16T21:31:45.523 回答
2

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

查看我的教程继承或协议?关于协议如何工作,以及何时使用它们而不是继承。包括大量示例代码,以及关于如何使用协议而不是作为 Objective-C 与其他语言的抽象类类似物的类别的讨论。祝您发展顺利!

于 2009-09-17T01:08:05.117 回答