将字符串(“MyExampleClass”)转换为类名(MyExampleClass)

时间:2011-01-11 05:41:24

标签: objective-c cocoa objective-c-runtime

我想将字符串转换为类名。想象一下,我有一个更改的字符串,包含一个类名,例如字符串"MyExampleClass"。现在,我想创建类MyExampleClass的对象。我必须从字符串中获取类名。我想做类似以下的事情。 (将代码视为草图。)

NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];

这样做的正确方法是什么?

4 个答案:

答案 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。