代码之家  ›  专栏  ›  技术社区  ›  Jacob Lyles

在Objective-C中动态加载类?

  •  7
  • Jacob Lyles  · 技术社区  · 15 年前

    有没有办法在运行时从Objective-C中的字符串导入类?任何能产生类似结果的方法也将受到欢迎。

    编辑:

    我想访问一个在运行时确定其名称的类。所以像这样:

    NSString *className = getClassName();
    Class myClass = loadClass(className);
    myClass *myVar = [[myClass alloc] init];
    

    如果不在文件的顶部放置myClass的静态import指令,有什么方法可以做到这一点吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   NiKKi    12 年前

    这个 #import 指令不会“导入”类,而是将命名文件中的文本插入到当前文件中。在编译源代码之后,这在运行时显然没有用处。

    你想要的是创建一个包含类和 dynamically load the bundle . 为了能够与核心程序中的类对话,您可能需要一些捆绑类实现的公共协议。

        2
  •  25
  •   Jason Coco superfell    15 年前

    你可以用 NSClassFromString 方法。所以:

    // Creates an instance of an NSObject and stores it in anObject
    id anObject = [[NSClassFromString(@"NSObject") alloc] init];
    

    更多示例代码以响应您的编辑:

    NSString* myClassString = getClassName();
    // if the class doesn't exist, myClass will be Nil and myVar will be nil
    Class* myClass = NSClassFromString(myClassString);
    id myVar = [[myClass alloc] init];
    
        3
  •  0
  •   Jacob Lyles    15 年前

    感谢Chuck为我指出了正确的路径,但是这个查询的正确答案似乎是在iOS4.1上是不可能的,尽管当前的MacOSXSDK使用可加载包是可能的。