我正在解析一个大约 53 MB 的 iPad 上的 JSON 文件。解析工作正常,我使用的是 Yajlparser,它是一个 SAX 解析器,并且设置如下:
NSData *data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedAlways|NSDataReadingUncached error:&parseError];
YAJLParser *parser = [[YAJLParser alloc] init];
parser.delegate = self;
[parser parse:data];
到目前为止一切正常,但是 JSON 文件变大了,现在我突然在 iPad 2 上遇到内存警告。它收到 4 个内存警告,然后就崩溃了。在 iPad 3 上,它可以完美运行,没有任何内存警告。
我已经开始使用 Instruments 对其进行分析,并发现了很多 CFNumber 分配(几分钟后我停止了 Instruments,我让它在崩溃之前运行,并且 CFNumber 的东西大约是 60 mb 或更多)。
打开 CFNumber 详细信息后,它显示了一个巨大的分配列表。其中一个向我展示了以下内容:
还有一个在这里:
那么我做错了什么?这个数字(例如最后一张图片中的 72.8%)代表什么?我正在使用 ARC,所以我没有做任何 Release 或 Retain 或其他任何事情。
谢谢你的帮助。干杯
编辑:我已经问过如何在这里解析如此大的文件的问题:iPad - Parsing anextreme huge json - File ( between 50 and 100 mb)
所以解析本身似乎很好。