Objective-C 中类加载时的静态初始化器
我正在尝试构建一些东西来从类名动态实例化一个对象,类似于Java的Class.forName方法的工作方式,例如,
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 中执行此操作?
谢谢。
I am trying to build something to dynamically instantiate an object from class-name similar to how Java's Class.forName method works, e.g.
Class klass = Class.forName("MyClass");
Object obj = klass.instantiate(...
I didn't see any such behavior in Objective-C so I would like to call a method to register Class when an Objective-C class is loaded. Basically, I would like to call a method that registers my class, e.g.
+ (void)mystatic {
[NSKeyedUnarchiver setClass:[self class] forClassName:"MyClass"]
}
Is there a way to do this in Objective-C on OS X platform?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您想使用 NSClassFromString,如下所示:
You want to use NSClassFromString, like this:
首先,Objective-C 中确实有这样的等效项 - 正如@Louis 建议的那样,使用 NSClassFromString()。
其次,如果您想要像 Java 中那样的静态构造函数,您也可以使用 +initialize 方法来实现。 请参阅此相关 SO 问题。
First, there is indeed such an equivalent in Objective-C — as @Louis suggested, use NSClassFromString().
Second, if you want a static constructor like in Java, you can do that as well with the +initialize method. See this related SO question.
您也可以说,
这通常有助于解决运行时可能尚未遇到您的类的情况。
You can also say
This frequently helps with cases when the runtime may not have come across your class yet.