1

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

例如我有一个类 XYZ 和几个工厂方法

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

我通常会这样称呼它

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

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

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

我希望你明白我的意思。

谢谢你。

4

1 回答 1

2

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

[XYZ performSelector:NSSelectorFromString(s)];

-performSelector:id对于不带参数并返回or的方法很有用void-performSelector:withObject:并且-performSelector:withObject:withObject:是采用 1 或 2id类型参数的变体。如果您需要更多的参数,或者您需要的参数或返回值不是id,那么您可以改用它NSInvocation来设置方法调用。请注意,这NSInvocation是(相对)昂贵的,所以只有在没有其他方法的情况下才应该使用它。

于 2012-08-24T00:14:24.240 回答