2009-07-04 31 views
2

我想建立一些动态实例化对象从类名类似于Java的Class.forName方法如何工作,例如,类加载Objective-C中的静态初始化器

Class klass = Class.forName("MyClass"); 
Object obj = klass.instantiate(... 

我没有看到在Objective-C的任何这样的行为,所以我想调用时被装载一个Objective-C类来注册类的方法。基本上,我想调用注册我的课程的方法,例如

+ (void)mystatic { 
    [NSKeyedUnarchiver setClass:[self class] forClassName:"MyClass"] 
} 

有没有在OS X平台上的Objective-C中做到这一点的方法?

谢谢。

回答

4

你想用NSClassFromString,像这样:

Class klass = NSClassFromString(@"MyClass"); 
id obj = [[klass alloc] init]; 
+1

它是“Class”而不是“Class *” – newacct 2009-07-05 03:55:34

3

首先,确实是有在Objective-C这样的等价物 - 作为@Louis建议,使用NSClassFromString()。其次,如果你想要一个像Java一样的静态构造函数,你可以用+ initialize方法来做到这一点。请参阅this related SO question

0

你也可以说

Class myClass = [[NSBundle mainBundle] classNamed: @"MyClassName]; 
id myInstance = [[myClass alloc] init]; 

这往往与案件有助于在运行时可能没有遇到你的类呢。