gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:53 25 4
gpt4 key购买 nike

这很容易用一个简短的例子来解释。假设我有以下协议(protocol)和类定义:

@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),那么警告就会消失。我仍然觉得很奇怪。

最佳答案

[[实例类] respondsToSelector:@selector(methodA)]

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

关于objective-c - 如何测试 Objective-C 类以确定它是否响应静态选择器(类方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915518/

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