在Objective-C中是否有任何自省方法来获取类的所有采用的协议



存在-[NSObject conformsToProtocol:]方法来检查是否采用了特定的协议。是否有任何方法可以获得类所采用的所有协议,而不是检查列表?

有一个更优雅的解决方案:class_copyProtocolList() 直接返回类所采用的协议。用法:

Class cls = [self class]; // or [NSArray class], etc.
unsigned count;
Protocol **pl = class_copyProtocolList(cls, &count);
for (unsigned i = 0; i < count; i++) {
    NSLog(@"Class %@ implements protocol <%s>", cls, protocol_getName(pl[i]));
}
free(pl);

正好有NSObject +conformsToProtocol;协议一致性被声明为@interface的一部分,因此它并不特定于每个实例。所以如。

if( [[self class] conformsToProtocol:@protocol(UIScrollViewDelegate)])
    NSLog(@"I claim to conform to UIScrollViewDelegate");

根本不需要下拉到c级运行时方法,至少对于你的问题的第一部分是这样。NSObject中没有提供支持协议的列表

你可以试试objc_copyProtocolList

。你得到所有协议的列表,然后通过迭代列表来检查当前对象是否符合特定的协议。

编辑:

H2CO3溶液真的比较好

相关内容

  • 没有找到相关文章

最新更新