30

我想将字符串转换为类名。想象一下,我有一个字符串,它会发生变化,其中包含一个类名,例如 string "MyExampleClass"。现在,我想创建一个类的对象MyExampleClass。我必须从字符串中获取类名。我想做如下的事情。(将代码视为草图。)

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

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

4

4 回答 4

76

这就是你想要的:

Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

请注意,您不能将theClass其用作类型名称(即theClass *myObject)。你必须使用id它。

于 2011-01-11T05:44:10.633 回答
22

你想要NSClassFromString

NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

您还可以使用 objc 运行时接口(例如objc_getClass(const char* name), objc_lookUpClass(const char* name))。前者不会加载类。后者会。在某些情况下,该选项可能是一件好事。

于 2011-01-11T05:43:29.327 回答
6
id a = [[NSClassFromString(@"MyExampleClass") alloc] init];

使用这个,这会给你你想要的。

于 2011-01-11T05:46:18.343 回答
1

如果您尝试动态构建类,我建议您更好地查看工厂方法设计模式,否则您将失去对谁构建什么以及如何构建的跟踪。

为此,您可以编写一个接收字符串并根据输入字符串返回一个类的类。

看看 Erich Gamma 的《设计模式:可重用的面向对象软件的元素》一书;理查德·赫尔姆;拉尔夫·约翰逊;约翰·弗利赛德斯。

于 2011-10-30T01:47:09.377 回答