2

我正在尝试构建一些东西来动态地从类名实例化一个对象,类似于 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 中做到这一点?

谢谢。

4

3 回答 3

4

你想使用 NSClassFromString,像这样:

Class klass = NSClassFromString(@"MyClass");
id obj = [[klass alloc] init];
于 2009-07-04T23:49:01.250 回答
3

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

其次,如果您想要像 Java 中那样的静态构造函数,您也可以使用 +initialize 方法来实现。请参阅这个相关的 SO 问题

于 2009-07-05T14:36:41.093 回答
0

你也可以说

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

这通常有助于解决运行时可能尚未遇到您的类的情况。

于 2009-09-29T18:07:02.230 回答