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

时间:2010-08-08 22:06:28

标签: objective-c runtime

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

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

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

 [myObject conformsToProtocol:@protocol(MyProtocol)];

如果我走上正确的轨道,递归上升了类层次结构,请告诉我。

2 个答案:

答案 0 :(得分:295)

According to the docs

[MyClass conformsToProtocol:@protocol(MyProtocol)];

应该有用。

答案 1 :(得分:2)

或者,如果它是一般指针,例如:

Class<MyProtocol> someClassPointer = nil;

你可以使用:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];