在我的代码中,我想知道方法是类方法还是实例方法。我目前使用的代码工作,但我想知道是否有更好的方式。
如果是类方法或实例,当前要“检测”的代码:
Method method = class_getInstanceMethod(class, selector);
if (method) {
__strong Class object = [[class alloc] init];
objc_msgSend(object, selector);
}else {
method = class_getClassMethod(class, selector);
if (method) {
objc_msgSend(class, selector);
}
}发布于 2014-02-21 15:58:00
除了两个if语句之外,几乎没有什么可以改进的。您可以使用respondsToSelector:方法,但是由于您一开始没有对象,所以您将在if中得到一个if,而不是一个更好看的else if。
if ([class respondsToSelector:selector]) {
// Call class method
} else {
id object = [[class alloc] init];
if ([object respondsToSelector:selector]) {
// Call instance method
}
}如果您可以修改您的程序流,使其从对象而不是类开始,则可以这样做:
if ([object respondsToSelector:selector]) {
// Call instance method
} else if ([[object class] respondsToSelector:selector]) {
// Call class method
}https://stackoverflow.com/questions/21938989
复制相似问题