如何解析一个巨大的 XML 文件而不是 运行 内存不足

How to parse a huge XML file any not run out of memory

我的应用程序可以导入 GPX 文件 (XML),然后我使用很棒的 XML Dictionary 库,它在解析 XML 和 GPX 方面做得非常出色,但在这种情况下我我想尝试解析一个 85MB 的文件。它包含超过 16,000 个 GPX waypoints,这是巨大的。

目前我将 NSURL 读入 NSData,然后使用解析器。但是我在尝试处理大文件时收到内存警告和崩溃。

如何分块解析这样的大文件,以免出现内存错误?

您正在使用的 XML 字典库的问题在于它构建了整个 XML 文件的庞大对象树。这会占用大量内存。

最好使用 SAX 解析器,例如标准 NSXMLParser class。除了在解析过程中保留的任何数据结构外,什么都不会保留在内存中。

在任何一种情况下,您都不需要在解析之前将整个 XML 文件加载到内存中。打开文件流并将流传递给解析器。