【发布时间】:2013-05-21 19:40:00
【问题描述】:
我花了很长时间试图弄清楚class_respondsToSelector 和respondsToSelector 如何给出不同的结果。考虑以下类:
@interface Dummy : NSObject
- (void)test;
@end
@implementation Dummy
- (void)test {}
@end
我的场景是我尝试确定一个类是否响应某个类方法。这篇文章重现了这个问题:
Class class = [Dummy class];
if (class_respondsToSelector(class, @selector(test)))
NSLog(@"class_respondsToSelector: YES");
else
NSLog(@"class_respondsToSelector: NO");
if ([class respondsToSelector:@selector(test)])
NSLog(@"respondsToSelector: YES");
else
NSLog(@"respondsToSelector: NO");
如果我删除-test 的声明和实现,上面的输出如预期的那样是NO 和NO。但是,按照上面的说明运行它(包括-test),产生的输出如下:
class_respondsToSelector:是
respondsToSelector:否
文档没有说明respondsToSelector 是否仅适用于实例,只是它表明接收器是否实现...,因此我无法确定这是否是正确的行为。我错过了什么吗?
更新
Graham Lee 将此链接提供给 great discussion on the problem。
【问题讨论】:
标签: objective-c selector objective-c-runtime