是否有一个类方法相当于-respondsToSelector:
?
就像是+respondsToSelector:
?
我问的原因是因为通过实施-respondsToSelector:
在类级别上,我收到编译器警告:“在协议中找到 '-respondsToSelector:' 而不是 '+respondsToSelector:'”。
代码如下所示:
Class <SomeProtocol> someClass = [someInstance class];
if ([someClass respondsToSelector:@selector(someSelector:)]) {
someVar = [someClass someSelector:someData];
}
看到您的编辑后更新:
类对象响应respondsToSelector:
很好,正如你可能知道的那样。在测试应用程序中,我可以执行以下两项操作,而不会出现任何编译器警告:
NSLog(@"Responds to selector? %i", [MyObject respondsToSelector:@selector(respondsToSelector:)]);
NSLog(@"Responds to selector? %i", [[MyObject class] respondsToSelector:@selector(respondsToSelector:)]);
但是,您已经在变量上声明了一个协议,因此它假定您指向的类对象实现了这些方法。最简单的解决方案是强制转换someClass
as an id
为了打电话的目的respondsToSelector:
。一个更干净的解决方案是声明你自己的@protocol
其中声明+respondsToSelector:(SEL)selector
,然后声明someClass
如下:
Class<SomeProtocol, ClassRespondingToSelector> someClass = ...
最后,请务必向 Apple 提交错误,网址为http://bugreporter.apple.com http://bugreporter.apple.com。包括一个简单的测试应用程序,以便非常清楚您在做什么。他们欢迎此类错误报告,即使这些错误报告是过去提交的,因为这有助于他们确定修复的优先顺序。
最后一点:这可能会发生,因为理论上,您可以选择实现一个完全独立于 NSObject 的根对象,在这种情况下,它wouldn't回应-respondsToSelector:
. -[NSObject respondsToSelector:]
实际上是在NSObject
协议,而不是类定义。这NSObject
协议实际上是您所知道的大部分内容的所在NSObject
实际上生活。有人可能会争辩说+respondsToSelector:
也应该在那里,但到目前为止,还没有。由于您提供了协议列表,并且该方法不在其中,因此它会向您发出警告,以确保您知道自己在做什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)