使用字符串而不是对象调用工厂方法

时间:2012-08-24 00:05:57

标签: objective-c ios

我只是想知道是否有一种方法(在Objective-C和iPad中)调用工厂方法,在那里我用字符串动态构建对象的名称。

e.g。我有一个XYZ类和几个工厂方法

 +(XYZ *) A;
 +(XYZ *) B;
 +(XYX *) C

我通常称之为

 [XYZ A];
 [XYZ B];
 [XYZ C];

但我希望能够用字符串动态调用它,例如

 NSString *s; 
 ...
 s = @"B";
 [XYZ s];

我希望你明白我的观点。

谢谢。

1 个答案:

答案 0 :(得分:2)

是。您可以使用NSSelectorFromString()NSString*转换为SEL(与@selector()提供的类型相同)。然后,您可以使用-performSelector:及其变体来调用它。

[XYZ performSelector:NSSelectorFromString(s)];

-performSelector:对于不带参数并返回idvoid的方法非常有用。 -performSelector:withObject:-performSelector:withObject:withObject:是带有1或2个id类型参数的变体。如果您需要更多参数,或者您需要的参数或返回值不是id,则可以使用NSInvocation来设置方法调用。请注意NSInvocation(相对)昂贵,所以只有在没有别的办法时才能使用它。

相关问题