Objective-C运行时:检查类是否符合协议的最佳方法?

Lea*_*s2D 170 runtime objective-c

我有一个类(但没有实例),需要知道它是否符合某个协议.但是,Class可以多次子类化,class_conformsToProtocol()忽略在超类上声明的协议.

我可以使用class_getSuperclass()并递归检查层次结构中的所有类,直到超类为nil.但是,我想知道这对于深层嵌套的类层次结构来说是否效率低下,也许有更好的方法可以做到这一点?

换句话说,如何使用Objective-C运行时方法最好地实现NSObject方法conformsToProtocol,以便在超类上找到协议?

 [myObject conformsToProtocol:@protocol(MyProtocol)];
Run Code Online (Sandbox Code Playgroud)

如果我在正确的轨道上以递归方式上升类层次结构,请告诉我.

Wev*_*vah 303

根据文件,

[MyClass conformsToProtocol:@protocol(MyProtocol)];
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 你是对的.已经很晚了,Xcode没有提供任何代码完成建议.我检查了Class的定义并发现它是"typedef struct objc_class*Class"我没有检查NSObject类的引用. (4认同)