Objective-C中的静态初始化程序在类加载时

时间:2009-07-04 23:21:09

标签: objective-c static-constructor

我正在尝试构建一些动态实例化类名的对象,类似于Java的Class.forName方法的工作原理,例如。

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

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

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

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

感谢。

3 个答案:

答案 0 :(得分:4)

您想要使用NSClassFromString,如下所示:

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

答案 1 :(得分:3)

首先,在Objective-C中确实存在这样的等价物 - 正如@Louis建议的那样,使用NSClassFromString()。

其次,如果你想要像Java一样的静态构造函数,你也可以使用+ initialize方法。请参阅this related SO question

答案 2 :(得分:0)

你也可以说

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

这经常有助于运行时可能尚未遇到您的课程的情况。