我想将字符串转换为类名。想象一下,我有一个更改的字符串,包含一个类名,例如字符串"MyExampleClass"
。现在,我想创建类MyExampleClass
的对象。我必须从字符串中获取类名。我想做类似以下的事情。 (将代码视为草图。)
NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];
这样做的正确方法是什么?
答案 0 :(得分:76)
这是你想要的:
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
请注意,您不能将theClass
用作类型名称(即theClass *myObject
)。你必须使用id
。
答案 1 :(得分:23)
您想要NSClassFromString
:
NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
您还可以使用objc运行时接口(例如objc_getClass(const char* name)
,objc_lookUpClass(const char* name)
)。前者不会加载一个类。后者会。在某些情况下,这个选项可能是件好事。
答案 2 :(得分:6)
id a = [[NSClassFromString(@"MyExampleClass") alloc] init];
使用这个会给你你想要的东西。
答案 3 :(得分:1)
如果您正在尝试动态构建类,我建议您更好地了解工厂方法设计模式,否则您将无法跟踪谁构建了什么以及如何构建。
为此,您可以编写一个接收字符串的类,并根据输入字符串返回一个类。
看一下“设计模式:可重复使用的面向对象软件的元素”一书 Erich Gamma;理查德赫尔姆;拉尔夫约翰逊; John Vlissides。