加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何测试Objective-C类以确定它是否响应静态选择器(类方法)?

发布时间:2020-12-16 09:44:04 所属栏目:百科 来源:网络整理
导读:用一个简单的例子可以很容易地解释这一点.假设我有以下协议和类定义: @protocol ProtocolA NSObject@optional+ (BOOL)methodA;@end@interface ClassA : NSObject ProtocolA@end ClassA可能定义也可能不定义methodA.如果我正在使用ClassA实例和实例方法,我可
用一个简单的例子可以很容易地解释这一点.假设我有以下协议和类定义:

@protocol ProtocolA <NSObject>
@optional
+ (BOOL)methodA;
@end

@interface ClassA : NSObject <ProtocolA>
@end

ClassA可能定义也可能不定义methodA.如果我正在使用ClassA实例和实例方法,我可以使用respondsToSelector:来测试实例.然而,在这种情况下,我想不出任何干净的方法来确定ClassA是否定义(响应)methodA.

编辑:
我很傻,并没有让我的例子足够详细,这意味着问题的答案并不完全是我的问题的解决方案 – 所以我包含了更多的代码和我得到的警告:

Class <ProtocolA> classRef = [ClassA class];

if([classRef respondsToSelector:@selector(methodA)]) {}

上面的代码抛出以下警告:
“实例方法’respondsToSelector:’找到而不是类方法’respondsToSelector:’”

我刚刚注意到,如果我明确地将classRef强制转换为(Class),那么警告就会消失.我仍觉得奇怪.

解决方法

[[instance class] respondsToSelector:@selector(methodA)]

类的每个实例都有一个指向它的类对象的指针,可以通过调用类来检索它.可以使用respondsToSelector探测此对象(类是Objective C中的对象):就像任何其他对象一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读