在未知类型的类中调用静态方法

时间:2012-07-30 10:16:04

标签: objective-c selector performselector

我有一个有趣的问题,我试图在一个类上调用类方法,我在我的测试方法中基本上一无所知。我可以检查它的继承和它可能实现的任何协议,但是看不到一个简单的方法来调用它上面的方法而不必与NSInvocation绑定。下面的代码,尽管是粗暴的,试图证明我遇到的问题。

@interface ClassA : NSObject

+ (Class)classIsPartialClassOf;

@end

@implementation ClassA

+ (Class)classIsPartialClassOf {
    return [NSString class];
}

@end

@interface ClassB : NSObject

@end

@implementation ClassB

- (id)init {

    [ClassB testClass:[ClassA class]];

}

+ (void)testClass:(Class)classDecl {

    /* obviously if you know the type you can just call the method */
    [ClassA classIsPartialClassOf];

    /* but in my instance I do not know the type, obviously there are no classmethods to perform selector such as the fictional one below */
    [classDecl performSelector:@selector(classIsPartialClassOf)];

}

@end

获取实现的方法似乎返回实例变体,我无法在静态类本身上触发它们。

我的选择是否仅限于调用,或者我是否错过了一些显而易见的事情并且应该自己开始?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

有什么问题?你的代码

[classDecl performSelector:@selector(classIsPartialClassOf)];

应该有效。一如既往(更容易写)

[classDecl classIsPartialClassOf];

类对象是对象。类方法只是在类对象上调用的方法。

答案 1 :(得分:0)

  

“获取实现的方法似乎返回实例变体,我不能让它们触发静态类本身。”

然后使用objc_getMetaClass("ClassName")代替objc_getClass。类对象本身就是对象,是其元类的实例。如果将元类对象传递给e。 G。 class_getMethod(),一切都会好的。