gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:26:44 29 4
gpt4 key购买 nike

有没有等价于-respondsToSelector:的类方法?

类似于 +respondsToSelector:?

我问的原因是因为通过在类级别实现 -respondsToSelector:,我收到编译器警告:“found '-respondsToSelector:' 而不是 '+respondsToSelector:' in protocol( s)"。

代码如下所示:

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:)]);

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

Class<SomeProtocol, ClassRespondingToSelector> someClass = ...

最后,请务必通过 http://bugreporter.apple.com 向 Apple 提交错误。 .包括一个简单的测试应用程序,以便非常清楚您在做什么。他们欢迎此类错误报告,即使它们过去曾提交过,因为这有助于他们确定修复的优先级。

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

关于objective-c - 类方法等价于 -respondsToSelector :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135366/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com