有一种-[NSObject conformsToProtocol:]
方法可以检查是否采用了特定协议。有没有什么方法可以获取一个类的所有采用的协议,而不是检查一个列表?
问问题
1937 次
3 回答
12
还有一个更优雅的解决方案:直接返回一个类采用的协议。用法: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);
于 2013-06-12T19:30:42.757 回答
3
确实有NSObject +conformsToProtocol
;协议一致性被声明为的一部分,@interface
因此它并不特定于每个实例。所以例如
if( [[self class] conformsToProtocol:@protocol(UIScrollViewDelegate)])
NSLog(@"I claim to conform to UIScrollViewDelegate");
根本不需要下降到 C 级运行时方法,至少对于您问题的第一部分。NSObject
获取支持的协议列表没有任何意义。
于 2013-06-12T20:42:32.820 回答
2
于 2013-06-12T16:53:46.750 回答