【发布时间】:2012-06-29 16:44:37
【问题描述】:
我的公司创建了一个供 iPad 应用使用的 Web 服务,但我们内部没有 iOS 开发经验,因此我们将这项工作外包出去。
作为初始化过程的一部分,应用程序会从 Web 服务接收一组 JSON 格式的起始数据。对于大多数应用用户而言,此数据集的大小约为 4 MB(未压缩),应用可以毫无问题地处理。
对于较小的用户组,数据大小要大得多,大约 65 MB 未压缩。有了这个数据集,iPad 应用程序崩溃了,开发人员声称该应用程序正在被杀死,因为它使用了太多的内存。如果我理解正确,他们会说这是在尝试将 JSON 解析为内存对象时发生的。
我的感觉是 1 GB 内存的设备在处理 65 MB 数据时应该不会有问题,但我没有 iOS 环境的经验可以以此为基础。
有没有人能够在 iOS 中处理大量 JSON 数据?如果问题在于将整个 JSON 数据集加载到内存中,是否有适用于 iOS 的流式 JSON 解析器会使用更少的内存?
【问题讨论】:
-
你看过 RestKit。异步数据得到处理。在我们公司工作,我们处理来自 Web 服务的大量 JSON。此外,短期解决方案可能是以固定大小的小数据包发送数据。更易于处理和使用。
-
在 WWDC 2012 上,Apple 表示 iPad 3 有 650MB 的硬内存限制(如果超过 watchdog 会杀死你的应用程序),但没有其他设备有硬限制。但无论如何,你不能只发送 10MB 的 JSON 数据,让应用一次处理一个吗?
-
最好的解决方案是分块传递数据,这样可以解决问题并加快处理速度。
-
@RoboticCat 谢谢你的信息。如果分解 JSON 是微不足道的,我会这样做并继续前进。不幸的是,情况并非如此,我觉得我不得不推迟,因为我无法理解应用程序如何耗尽内存。
-
@adrift 我同意回击。当然,这取决于开发人员正在测试的设备,但如果是 iPad 3,我会非常怀疑 65MB 的数据是否超过了 650MB 的限制。他们是否可以将代码发送给您以供审查,或者至少向您发送来自 Instruments 的分配跟踪,以证明分配了超过 650MB 的脏内存(并且应该通过审查错误跟踪来证明 Watchdog 正在杀死应用程序)。