Objective-C对Class变量的调用类方法

时间:2011-12-12 01:26:17

标签: objective-c class

我需要在Class类型的变量上调用类方法,我知道它包含基类的子类MyBaseClass ...

- (void)foo:(Class)clazz {
  // Now i want to call +myClassMethod on clazz
}

我不知道这是否真的可行。如果是,是否有更安全的方法来保证clazz实际上是MyBaseClass的子类?

提前致谢

2 个答案:

答案 0 :(得分:6)

您可以使用-respondsToSelector:,就像使用任何Objective-C对象一样。您还可以使用+isSubclassOfClass:来测试该类是否是另一个类的子类。

- (void)foo:(Class)clazz 
{
    if ([clazz respondsToSelector:@selector(myClassMethod)])
    {
        [clazz myClassMethod];
    }
    else
    {
        // clazz does not implement that class method.
    }

    if ([clazz isSubclassOfClass:[MyBaseClass class]])
    {
        [clazz myClassMethod];
    }
    else
    {
        // clazz is not a subclass of MyBaseClass.
    }
}

答案 1 :(得分:1)

试试这个:

if ( [clazz isKindOfClass:[MyBaseClass class]] ) {
  [clazz myClassMethod];
}