方法是类方法还是实例方法

时间:2014-02-21 15:51:50

标签: objective-c

在我的代码中,我想知道方法是类方法还是实例方法。我目前使用的代码有效,但我想知道是否有更好的方法。

当前代码“检测”它是否是类方法或实例:

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);
  }
}

1 个答案:

答案 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
}