ios – iPad – 解析一个非常大的json – 文件(50到100 mb之间)

我试图在iPad上解析一个非常大的json-File.文件大小将在50和100 mb之间变化(有一个初始文件,每月将有一个新的全套数据,将被下载,解析并保存到coredata中)

我正在为公司构建这个应用程序作为企业解决方案 – json文件包含敏感的客户数据,它需要在本地保存在ipad上,这样它甚至可以脱机运行.当文件低于20mb时,它工作,但现在数据集变得更大,我真的需要解析它.在解析期间我收到内存警告,第三个警告之后它正在崩溃.
我有几个不同的核心数据实体,我只是设置来自json文件的所有值(当应用程序第一次启动时),一切都完成后,我正在进行[上下文保存].

我希望有人可以给我一些关于如何处理这么大的文件的建议.我正在考虑将json文件分成几个较小的json文件,也可能在多个线程中解析它们,但我不知道这是否是正确的方法.我想一个大问题是,整个文件被记录在内存中 – 也许有一些方法可以将其“流式传输”到内存中或类似的东西?

我使用JSONKit(https://github.com/johnezang/JSONKit)来解析文件,因为我已经读过它是最快的(可能有一个更慢的内存更容易).

提前致谢.

解决方法

1)将数据写入一个文件,然后使用NSData的dataWithContentsOfFile:options:error:并指定NSDataReadingMappedAlways和NSDataReadingUncached标志.这将告诉系统使用mmap()来减少内存占用,而不是使用内存块来加载文件系统缓存(这使得它更慢,但更不用说是iOS的负担).

2)您可以使用YAJL SAX style JSON parser来解码对象.

注意:我没有做过2)但使用了1)中体现的技术.

3)我最终自己需要这样的事情,并写了SAX-JSON-Parser-ForStreamingData可以绑定到任何异步下载(包括我自己的).

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...