2011-01-11 47 views
29

我想将字符串转换为类名称。想象一下,我有一个字符串,其中包含一个类名称,例如字符串"MyExampleClass"。现在,我想创建类MyExampleClass的对象。我必须从字符串中获取类名。我想要做类似下面的事情。 (考虑代码就像草图)将字符串(“MyExampleClass”)转换为类名称(MyExampleClass)

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

什么是正确的方法来做到这一点?

+0

你还没有阅读关于反射的java教程吗? – atk 2011-01-11 05:43:11

回答

76

这里有你想要的东西:

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

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

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))。前者不会加载课程。后者将会。在某些情况下,这种选择可能是一件好事。

6
id a = [[NSClassFromString(@"MyExampleClass") alloc] init]; 

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

0

如果你想动态建立的类,我建议你最好先看看工厂方法设计模式,否则你就会成为失去跟踪谁建造什么和如何。

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

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