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

标签 objective-c ios

我只是想知道是否有一种方法(在 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: 对于不带参数并返回 idvoid 的方法很有用。 -performSelector:withObject:-performSelector:withObject:withObject:是采用 1 或 2 个 id 类型参数的变体。如果您需要比这更多的参数,或者您需要一个不是 id 的参数或返回值,那么您可以使用 NSInvocation而是设置方法调用。请注意,NSInvocation(相对)开销很大,因此只有在别无他法时才应使用它。

关于objective-c - 使用字符串而不是对象调用工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101661/

相关文章:

ios - 用于非网格或半网格布局的 UICollectionView

ios - 我该怎么做 indexOfObject 或适当的 containsObject

ios - Swift Core Data 只保存与循环中最后一个的关系

ios - dispatch_sync 和全局队列的理解

ios - 无法在 objective-c 中使用 class(swift)

ios - 使用 Parse.com iOS 搜索用户名以获取用户

objective-c - 第三方库如何在 Objective-C 和 Xcode 中工作?

ios - 圆角 View 在 iOS 9 中不起作用

ios - 在不同状态下更改子类 UIButton 的边框颜色

iOS 和 Objective-C : most of CPU time is spent in [NSObject release] and [NSObject retain] but class method is not doing any memory operations