我已经在此处搜索了有关 SO 的问题,以寻找关于为什么我会看到这种行为的任何提示,但目前还没有。
考虑一个类(实际上是两个表现出相同问题的类),内置到一个静态库中,包装在一个框架包中(steps used)。它们继承自 Foundation 框架 class clusters (NSMutableDictionary
和 NSMutableArray
)。
这些类的使用依赖于在使用静态函数(不是类方法!)分配和初始化实例(我猜是一种工厂辅助函数? ).
当 iOS 应用程序项目链接到该框架时,模拟器和设备之间的 Objective-C 运行时类加载行为会有所不同。
具体来说,在设备(iPhone 4、iOS 4.3.3)上加载应用程序时,这些类不会收到 +load
消息,并且静态变量不会初始化,因此静态工厂方法失败。在模拟器上,消息被发送,并且一切都按预期工作。设备运行时是否有问题
我的问题是,我的框架是否可以进行不同的配置以确保发送 +load
消息?还是我在 iOS 中遇到静态库/框架类加载错误?
类(class)来自JSONKit库(JKArray
,JKDictionary
)。
说明此问题的示例项目在这里 – https://github.com/ohhorob/JSONKit-in-framework-demo
编辑:根据@bbum 的建议,我已经验证了 JKDictionary
和 JKArray
类实际上已加载并且在应用程序运行时可用。 GitHub 项目上的 DeviceBroken
分支更新了使用的验证。
我向 Apple 提交了错误报告 (#9461567)。
最佳答案
+load
方法没有被调用,因为您实际上并没有创建一个静态库,而是一个可重定位目标文件包强>。如果您使用 make-fmwk 创建静态框架或 iOS Universal Framework模板,然后将按预期调用加载方法。
关于iphone - +(void)load 消息未发送到设备运行时的框架类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6047903/