在objc运行时中加载来自主模块的另一个模块中的类

时间:2018-01-24 00:51:13

标签: ios objective-c

这可能是一个完全倒退的设计,但我想知道这是否可行。我刚刚开始一个有一个名为Core的现有框架的项目。 Core包含协议,当加载Core时,它会执行此操作

for className in classNames {
    let clazz = objc_getClass(className)
...
}

基本上在Core模块中它有一个classNames数组,它们只是字符串,然后用objc_getClass()

创建类

所有这些类都符合CoreType协议。

假设我有另一个较小的模块,我们将其称为SubCore,它作为依赖项Core引入,并且有自己的类符合CoreType

  • Core具有CoreType协议,并在加载SDK时实例化类
  • SubCore依赖Core with Carthage并定义符合CoreType的MyClass

    let classNames = ["MyClass", ...] // classes that conform to CoreType that are defined in Core, and one class, MyClass, that is defined in SubCore
    for className in classNames {
        let clazz = objc_getClass(className)
        ...
    }
    

在一个示例应用程序中,我通过Carthage引入Core和SubCore并尝试加载SDK。运行上面的块时,className“MyClass”的clazz为nil。

我猜这是因为MyClass是在SubCore中定义的,Core并不知道SubCore是什么。那是对的吗?更重要的是,有没有办法在Core中定义一个接口,让SubCore定义一个符合该协议的类,并在Core加载时实例化它,就像我在上面尝试一样?

0 个答案:

没有答案