代码之家  ›  专栏  ›  技术社区  ›  Joe

模仿“虚函数”的Objective-C协议会产生编译器警告?

  •  2
  • Joe  · 技术社区  · 15 年前

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

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

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

    我想遍历子实例,通过父类引用它们,对每个实例调用mymethod。

    编译器——不足为奇——警告家长可能不会响应MyMethod。

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

    我错过了什么?

    谢谢

    2 回复  |  直到 14 年前
        1
  •  3
  •   Chuck    15 年前

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

        2
  •  2
  •   Jonathan Sterling    14 年前

    我注意到很多人对协议及其工作方式很感兴趣。不幸的是,上面有很多误导性的教程。

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