首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与-respondsToSelector等效的类方法:

与-respondsToSelector等效的类方法:
EN

Stack Overflow用户
提问于 2009-07-16 04:21:04
回答 5查看 36.3K关注 0票数 68

是否有等同于-respondsToSelector:的类方法

+respondsToSelector:这样的东西

我问这个问题的原因是,通过在类级别上实现-respondsToSelector:,我得到了一个编译器警告:“在协议中找到'-respondsToSelector:‘而不是'+respondsToSelector:’”。

代码如下所示:

代码语言:javascript
复制
Class <SomeProtocol> someClass = [someInstance class];

if ([someClass respondsToSelector:@selector(someSelector:)]) {
    someVar = [someClass someSelector:someData];
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-16 05:21:11

查看您的编辑后的更新:

正如您可能知道的那样,类对象可以很好地响应respondsToSelector:。在测试应用程序中,我可以执行以下两项操作,而不会出现任何编译器警告:

代码语言:javascript
复制
NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);

但是,您已经在变量上声明了一个协议,因此它假定您所指向的类对象实现了这些方法。最简单的解决方案是将someClass转换为id,以便调用respondsToSelector:。一种更简洁的解决方案是声明您自己的@protocol,它声明+respondsToSelector:(SEL)selector,然后按如下方式声明someClass

代码语言:javascript
复制
Class<SomeProtocol, ClassRespondingToSelector> someClass = ...

最后,一定要在http://bugreporter.apple.com上向苹果提交一个bug。包括一个简单的测试应用程序,以便非常清楚您在做什么。他们欢迎这样的bug报告,即使他们过去已经提交过,因为这有助于他们确定修复的优先顺序。

最后注意:这可能是因为从理论上讲,您可以选择实现一个完全独立于NSObject的根对象,在这种情况下,它不会响应-respondsToSelector:-[NSObject respondsToSelector:]实际上是在NSObject协议中声明的,而不是类定义。您所知的大多数NSObject协议实际上都位于NSObject协议中。有人可能会争辩说,+respondsToSelector:也应该在那里,但到目前为止,它还没有。由于您已经提供了一个协议列表,而该方法不在其中,因此它会给您一个警告,以确保您知道自己在做什么。

票数 83
EN

Stack Overflow用户

发布于 2009-07-16 04:30:59

类方法只是类对象的一个方法,所以您应该能够做到这一点

代码语言:javascript
复制
[MyClass respondsToSelector:@selector(...)]
票数 9
EN

Stack Overflow用户

发布于 2013-02-21 01:43:37

从iOS 2.0开始,您可以使用以下instancesRespondToSelector:,因此,对于类的实例,您可以这样做;

代码语言:javascript
复制
[myInstance respondsToSelector: @selector(...)];

使用一个您可以使用的类

代码语言:javascript
复制
[myClass instanceRespondsToSelector: @selector(...)];
// or
[[myInstance class] instanceRespondsToSelector: @selector(...)];

它的行为将类似于+(BOOL) respondsToSelector

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

https://stackoverflow.com/questions/1135366

复制
相关文章

相似问题

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