Objective-C协议模拟';虚拟函数&x27;产生编译器警告?

Objective-C协议模拟';虚拟函数&x27;产生编译器警告?,objective-c,polymorphism,protocols,virtual-functions,Objective C,Polymorphism,Protocols,Virtual Functions,在Objective-C中,我希望强制派生类实现给定接口,而不提供默认实现(父类中的实现) 我知道协议可以用于此,我相信我知道如何使用协议,但我显然遗漏了一些东西 我定义了类Parent,并从Parent派生了几个子类。 所有子类都符合需要实现myMethod的协议 我希望遍历子实例,通过父类引用它们,并在每个子实例上调用myMethod 编译器——毫不奇怪——警告父级可能不会响应myMethod 所有证据都表明,myMethod实际上将为每个派生的子实例调用,但我收到警告这一事实让我感到不安,

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

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

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

我希望遍历子实例,通过父类引用它们,并在每个子实例上调用myMethod

编译器——毫不奇怪——警告父级可能不会响应myMethod

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

我错过了什么


谢谢

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

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


查看我的教程,了解协议如何工作,以及何时使用它们而不是继承。其中包括大量示例代码,并讨论了如何使用协议,而不是将类别作为其他语言抽象类的Objective-C类比。祝你发展顺利

太好了,谢谢。我想有一点我不清楚:我的父类没有实现该方法,也没有声明与协议的一致性。当然,这些都是我们想要的。我缺少的是“id”语法——我没有意识到这一点。谢谢该链接似乎已断开,我无法找到文章的新位置。我刚刚修复了答案中的链接。谢谢你注意到这一点@JonathanSterling你能再检查一下吗?现在无法访问