在我的代码中,我想知道方法是类方法还是实例方法。我目前使用的代码有效,但我想知道是否有更好的方法。
当前代码“检测”它是否是类方法或实例:
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);
}
}
答案 0 :(得分:3)
除了两个if
语句之外,你几乎无法提高。您可以使用respondsToSelector:
方法,但由于您没有开头的对象,因此if
内的if
最终会变得更好看else if
1}}:
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
}