检测方法" A"是一个类与实例方法?

时间:2017-11-10 18:35:32

标签: objective-c objective-c-runtime

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

要清楚;我没有实例,我只有类,使用[NSBundle classNames:name]获得。现在,我想知道我是否可以在类上调用方法A,或者我需要先实例化该类,然后在实例上调用A

2 个答案:

答案 0 :(得分:4)

您可以使用其class方法/属性向对象询问其类。该类由对象(类Class)表示。与其他对象一样,类对象理解respondsToSelector:消息。

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

P.S。这可能不是好设计。您应该只是在任何地方实现A作为实例方法,而不是有时作为类方法。

答案 1 :(得分:1)

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
}