iphone - +(void)load 消息未发送到设备运行时的框架类

标签 iphone objective-c ios objective-c-runtime ios-frameworks

我已经在此处搜索了有关 SO 的问题,以寻找关于为什么我会看到这种行为的任何提示,但目前还没有。


考虑一个类(实际上是两个表现出相同问题的类),内置到一个静态库中,包装在一个框架包中(steps used)。它们继承自 Foundation 框架 class clusters (NSMutableDictionaryNSMutableArray)。

这些类的使用依赖于在使用静态函数(不是类方法!)分配和初始化实例(我猜是一种工厂辅助函数? ).

当 iOS 应用程序项目链接到该框架时,模拟器和设备之间的 Objective-C 运行时类加载行为会有所不同。

具体来说,在设备(iPhone 4、iOS 4.3.3)上加载应用程序时,这些类不会收到 +load 消息,并且静态变量不会初始化,因此静态工厂方法失败。在模拟器上,消息被发送,并且一切都按预期工作。设备运行时是否有问题

我的问题是,我的框架是否可以进行不同的配置以确保发送 +load 消息?还是我在 iOS 中遇到静态库/框架类加载错误?


类(class)来自JSONKit库(JKArrayJKDictionary)。

说明此问题的示例项目在这里 – https://github.com/ohhorob/JSONKit-in-framework-demo


编辑:根据@bbum 的建议,我已经验证了 JKDictionaryJKArray 类实际上已加载并且在应用程序运行时可用。 GitHub 项目上的 DeviceBroken 分支更新了使用的验证。

我向 Apple 提交了错误报告 (#9461567)。

最佳答案

+load 方法没有被调用,因为您实际上并没有创建一个静态库,而是一个可重定位目标文件。如果您使用 make-fmwk 创建静态框架或 iOS Universal Framework模板,然后将按预期调用加载方法。

关于iphone - +(void)load 消息未发送到设备运行时的框架类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6047903/

相关文章:

objective-c - 为什么 NSData dataWithContentsOfURL 有时会返回 NULL 值?

ios - 如何在FittedBox中处理动态图像

iphone - 有谁知道如何通过 URL 架构在 Apple map 上放置图钉

iphone - 如何在单击按钮时显示 UISplitViewcontroller

ios - command/usr/bin/codedesign 失败,退出代码 1-代码符号错误

JavaScript 离线进度保存

html - 在 iOS safari 上调试

ios - nil中的managedObjectModel(仅在WatchApp中)

iPhone : form like new contact

ios - iOS 8 的基本身份验证失败