+(void)加载消息未在设备运行时发送到框架类

ohh*_*rob 3 iphone objective-c objective-c-runtime ios ios-frameworks

我在这里搜索了一些关于SO的问题,寻找任何暗示,为什么我看到这种行为,什么都没有.


考虑一个类(实际上是两个表现出相同问题的类),构建在静态库中,包装在框架包中(使用的步骤).它们继承自Foundation框架类集群(NSMutableDictionaryNSMutableArray).

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

当iOS应用程序项目链接到该框架时,模拟器和设备之间的Objective-C运行时类加载行为存在差异.

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

我的问题是,我的框架可以配置不同以确保+load邮件发送?或者我遇到了iOS中静态库/框架类加载的错误?


这些类来自JSONKit库(JKArray,JKDictionary).

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


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

我向Apple提交了一份bug报告(#9461567).

0xc*_*ced 5

+load不调用这些方法,因为您实际上并未创建静态库,而是创建可重定位目标文件.如果使用make-fmwkiOS Universal Framework模板创建静态框架,则将按预期调用加载方法.