我只是想知道是否有一种方法(在Objective-C和iPad中)调用工厂方法,在那里我用字符串动态构建对象的名称。
e.g。我有一个XYZ类和几个工厂方法
+(XYZ *) A;
+(XYZ *) B;
+(XYX *) C
我通常称之为
[XYZ A];
[XYZ B];
[XYZ C];
但我希望能够用字符串动态调用它,例如
NSString *s;
...
s = @"B";
[XYZ s];
我希望你明白我的观点。
谢谢。
答案 0 :(得分:2)
是。您可以使用NSSelectorFromString()
将NSString*
转换为SEL
(与@selector()
提供的类型相同)。然后,您可以使用-performSelector:
及其变体来调用它。
[XYZ performSelector:NSSelectorFromString(s)];
-performSelector:
对于不带参数并返回id
或void
的方法非常有用。 -performSelector:withObject:
和-performSelector:withObject:withObject:
是带有1或2个id
类型参数的变体。如果您需要更多参数,或者您需要的参数或返回值不是id
,则可以使用NSInvocation
来设置方法调用。请注意NSInvocation
(相对)昂贵,所以只有在没有别的办法时才能使用它。