我需要在类型为Class的变量上调用类方法,我知道它包含基类的子类MyBaseClass ...
- (void)foo:(Class)clazz {
// Now i want to call +myClassMethod on clazz
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否真的可行.如果是,是否有更安全的方法来保证clazz实际上是MyBaseClass的子类?
提前致谢
您可以-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.
}
}
Run Code Online (Sandbox Code Playgroud)