用一个简短的例子可以很容易地解释这一点。假设我有以下协议和类定义:
@protocol ProtocolA <NSObject>
@optional
+ (BOOL)methodA;
@end
@interface ClassA : NSObject <ProtocolA>
@end
ClassA
可以定义也可以不定义methodA
。如果我正在使用 的实例ClassA
和实例方法,我可以使用respondsToSelector:
. 但是,在这种情况下,我想不出任何干净的方法来确定 if ClassA
defined (respons to) methodA
。
编辑: 我很傻,没有让我的例子足够具体,这意味着问题的答案并不完全是我问题的解决方案——所以我包含了更多代码和我收到的警告:
Class <ProtocolA> classRef = [ClassA class];
if([classRef respondsToSelector:@selector(methodA)]) {}
上面的代码抛出以下警告:“respondsToSelector:
找到实例方法''而不是类方法' respondsToSelector:
'”
我现在才注意到,如果我明确地classRef
转换为,(Class)
那么警告就会消失。我仍然觉得这很奇怪。