检测方法 "A" 是否是 class 与实例方法?

Detect whether method "A" is a class vs. instance method?

我的程序中有多个对象,其中一些将方法 A 实现为 class 方法 (+ (void)A ),而另一些将其实现为成员函数 (- (void) A) . 我如何使用 respondToSelector: 来确定 A 是否被给定对象支持为 class 而不是对象?

澄清一下;我没有实例,我只有 classes,使用 [NSBundle classNames:name] 获得。现在,我想知道我是否可以简单地在 class 上调用方法 A,或者我需要先实例化 class,然后在实例上调用 A

您可以使用对象的 class method/property 向对象询问其 class。 class 由对象(class Class)表示。与其他对象一样,class 个对象理解 respondsToSelector: 消息。

if ([object respondsToSelector:@selector(A)]) {
    [object A];
} else if ([object.class respondsToSelector:@selector(A)]) {
    [object.class A];
}

P.S。这可能不是好的设计。您可能应该在任何地方都将 A 实现为实例方法,而不是有时将其实现为 class 方法。

if ([[NSBundle classNamed:name] respondsToSelector:@selector(A)]){
  //Your class responds to the selector i.e. its a class method
} else if ([[NSBundle classNamed:name] instancesRespondToSelector:@selector(A)]){
  //Your class' instances respond to the selector, i.e. its an instance method
}