调用一个从NSString返回值的方法?

时间:2013-12-06 20:54:23

标签: ios objective-c methods selector

我有一个类方法(+),它接受类型为NSString的参数。我想用该类方法做的是从另一个类方法返回信息,有许多不同的类方法返回不同的东西,我不想使用switch or if-statement但是这样的东西:

return [self "ClassMethodName"];

我知道怎么用@selector()来做,但似乎我不能在类方法中使用它。还有另一种方法可以做我想要的吗?

2 个答案:

答案 0 :(得分:2)

如果你是通过类方法进行的,那么self就是类对象,所以你可以这样做:

+ (id)myClassMethod {
    return [self performSelector:NSSelectorFromString(@"ClassMethodName")];
}

如果您是通过实例方法进行的,那么您必须问问自己的课程:

- (id)myInstanceMethod {
    return [self.class performSelector:NSSelectorFromString(@"ClassMethodName")];
}

当然,如果在编译时已知@selector(ClassMethodName),则可以使用ClassMethodName,但我假设您在运行时之前实际上并不知道选择器名称。

请注意,Xcode不知道Class个对象是NSObject的实例,因此在这些情况下,它不会为您自动完成performSelector:

答案 1 :(得分:1)

实际上,因为类本身就是对象。

SEL selector = NSSelectorFromString(@"ClassMethodName");    

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[self performSelector:selector];
#pragma clang diagnostic pop

编译器行需要使编译器静音警告“PerformSelector可能导致泄漏,因为它的选择器未知”(详见this question)。