我的程序中有多个对象,其中一些将方法A实现为类方法(+ (void)A
),而另一些则将其实现为成员函数(- (void) A
)。
如何使用respondToSelector:
来确定给定对象是否支持A作为类与对象?
要清楚;我没有实例,我只有类,使用[NSBundle classNames:name]获得。现在,我想知道我是否可以在类上调用方法A
,或者我需要先实例化该类,然后在实例上调用A
。
答案 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
}