objective-c – 类方法等价于-respondsToSelector:

objective-c – 类方法等价于-respondsToSelector:,第1张

概述是否有类方法等效于-respondsToSelector:? 像是respondToSelector:? 我问的原因是因为通过实现-respondsToSelector:在类级别,我得到一个编译器警告:“found’-respondsToSelector:’而不是’responsesToSelector:’在协议。 代码如下所示: Class <SomeProtocol> someClass = 是否有类方法等效于-respondsToSelector:?

像是respondToSelector:?

我问的原因是因为通过实现-respondsToSelector:在类级别,我得到一个编译器警告:“found’-respondsToSelector:’而不是’responsesToSelector:’在协议。

代码如下所示:

Class <SomeProtocol> someClass = [someInstance class];if ([someClass respondsToSelector:@selector(someSelector:)]) {    someVar = [someClass someSelector:someData];}
解决方法 在看到您的编辑后更新:

类对象响应respondToSelector:就好了,你可能知道。在测试应用程序中,我可以执行以下两个 *** 作,而不会出现任何编译器警告:

NSLog(@"Responds to selector? %i",[MyObject respondsToSelector:@selector(respondsToSelector:)]);NSLog(@"Responds to selector? %i",[[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);

但是,您已经在变量上声明了一个协议,因此它假定您指向的类对象实现这些方法。最简单的解决方案是将someClass转换为ID以调用responsesToSelector :.一个更清洁的解决方案是声明你自己的@protocol,声明respondToSelector:(SEL)选择器,然后声明someClass如下:

Class<SomeProtocol,ClassRespondingToSelector> someClass = ...

最后,一定要在Apple提交一个BUG在http://bugreporter.apple.com.包括一个简单的测试应用程序,所以它很清楚你在做什么。他们欢迎这些错误报告,即使他们在过去提交,因为它帮助他们优先解决这些修复。

最后注意:这可能发生,因为在理论上,你可以选择实现一个根对象完全独立于NSObject,在这种情况下,它不会响应-respondsToSelector:。 – [NSObject respondingToSelector:]实际上是在NSObject协议中声明的,而不是类定义。 NSObject协议实际上是你知道的NSObject的大部分实际存在。有人可能认为respondToSelector:也应该在那里,但是现在,它不是。由于您提供了协议列表,并且该方法不在其中,它会向您发出警告,以确保您知道您在做什么。

总结

以上是内存溢出为你收集整理的objective-c – 类方法等价于-respondsToSelector:全部内容,希望文章能够帮你解决objective-c – 类方法等价于-respondsToSelector:所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1047704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存