Objective c 类别对实现协议的类有什么影响?

Objective c 类别对实现协议的类有什么影响?,objective-c,Objective C,对于我当前的项目,我有一些协议,我在实现该协议的类上声明了一个类别: @interface MyClass (ImplementingMyProtocol) <MyProtocol> @end @implementation // Implementation of protocol @end @接口MyClass(实现MyProtocol) @结束 @实施 //协议的实施 @结束 我认为有两种可能解释这一方案: 该类别仅适用于符合MyProtocol的MyClass子

对于我当前的项目,我有一些协议,我在实现该协议的类上声明了一个类别:

@interface MyClass (ImplementingMyProtocol) <MyProtocol>

@end


@implementation

// Implementation of protocol

@end
@接口MyClass(实现MyProtocol)
@结束
@实施
//协议的实施
@结束
我认为有两种可能解释这一方案:

  • 该类别仅适用于符合
    MyProtocol
    MyClass
    子类
  • 该类别适用于
    MyClass
    的所有实例,其效果是按类别实施
    MyProtocol

  • 这两种可能性中哪一种实际适用?我不知道编译器是如何解释这个声明的,我也没有找到关于这个主题的任何帮助或文档。我想我知道如何处理这两个选项,但要做到这一点,我需要知道哪一个是编译器解释我的代码的方式。

    以上的效果是,xcode知道类MyClass确实打算实现给定的协议MyProtocol 它也将在运行时符合它


    协议只是“元信息”——运行时不需要它。。运行库只知道我有这个类,我应该调用这个方法

    它不检查与某些协议的一致性


    协议只用于IDE的类型检查(它可以给您警告),您可以在运行时询问类,但objC没有



    所以执行时根本不需要它们:D

    但是“conformsToProtocol”方法呢?这不是运行时知道的一些与协议相关的信息吗?我可以理解您的观点,使用Objective C,我可以向任何对象发送任何类型的消息,并希望得到回复,但我认为可以在运行时使用协议(使用上述方法)对对象执行一些额外的检查,无论它是否会给我发送一些消息给对象的错误……是的。。。。“您可以在运行时询问一个类,但objC没有”--运行时不关心,对于给定的示例,检查结果将为“是”