我只是想知道是否有一种方法(在 Objective-C 和 iPad 中)可以调用工厂方法,我可以在其中使用字符串动态构建对象的名称。
例如我有一个类 XYZ 和几个工厂方法
+(XYZ *) A;
+(XYZ *) B;
+(XYX *) C
我通常会这样调用它
[XYZ A];
[XYZ B];
[XYZ C];
但我希望能够使用字符串动态调用它,例如
NSString *s;
...
s = @"B";
[XYZ s];
希望你明白我的意思。
谢谢。
最佳答案
是的。您可以使用 NSSelectorFromString()
将 NSString*
转换为 SEL
(与 @selector()
提供的类型相同)。然后你可以用 -performSelector:
调用它及其变体。
[XYZ performSelector:NSSelectorFromString(s)];
-performSelector:
对于不带参数并返回 id
或 void
的方法很有用。 -performSelector:withObject:
和 -performSelector:withObject:withObject:
是采用 1 或 2 个 id
类型参数的变体。如果您需要比这更多的参数,或者您需要一个不是 id
的参数或返回值,那么您可以使用 NSInvocation
而是设置方法调用。请注意,NSInvocation
(相对)开销很大,因此只有在别无他法时才应使用它。
关于objective-c - 使用字符串而不是对象调用工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101661/