首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么class_respondsToSelector和respondsToSelector在被发送到类时表现不同?

为什么class_respondsToSelector和respondsToSelector在被发送到类时表现不同?
EN

Stack Overflow用户
提问于 2013-05-21 19:40:00
回答 1查看 804关注 0票数 4

我花了相当长的时间试图弄清楚class_respondsToSelectorrespondsToSelector如何给出不同的结果。请考虑以下课程:

代码语言:javascript
复制
@interface Dummy : NSObject
- (void)test;
@end

@implementation Dummy
- (void)test {}
@end

我的场景是,我试图确定一个类是否响应某个类方法。这篇文章再现了这个问题:

代码语言:javascript
复制
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是否只适用于实例,只表明接收方是否实现了.,因此我无法确定这是否是正确的行为。我是不是遗漏了什么?

更新

格雷厄姆·李提供了到一个关于这个问题的大讨论的链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-21 19:49:46

class_respondsToSelector()提出的问题是“这个类的实例是否响应这个选择器?”

-[NSObject respondsToSelector:]提出的问题是“此特定实例(即”接收者“)是否响应此选择器?”

您将respondsToSelector:发送到一个类对象,这个类对象本身就是其元类的一个实例,并询问该特定对象。

要查看与class_respondsToSelector()相同的结果,可以使用+[NSObject instancesRespondToSelector:]或获取类的实例。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16678141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档