【问题标题】:Static initializer in Objective-C upon Class Loading类加载时 Objective-C 中的静态初始化程序
【发布时间】:2009-07-04 23:21:09
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: objective-c static-constructor


    【解决方案1】:

    你想使用 NSClassFromString,像这样:

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

    【讨论】:

    • 它是“类”而不是“类 *”
    • 我不应该在疲倦的时候在网络表单中编写代码 ;-) 谢谢,已修复。
    【解决方案2】:

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

    其次,如果您想要像 Java 中那样的静态构造函数,您也可以使用 +initialize 方法来实现。见this related SO question

    【讨论】:

      【解决方案3】:

      你也可以说

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 2021-07-12
        • 1970-01-01
        相关资源
        最近更新 更多