所以我有0.5MB的XML文件,包含我的iPhone应用程序的数据。这一切都是只读的,所以我不必费心写作。
目前我正在使用NSXMLParser来加载数据。
我很喜欢NSXMLParser,我创建了一个只加载我当前需要的部分数据的类。因此,一旦解析了文件,它就会占用最少的内存。
但它很慢。解析XML文件需要500-1000毫秒,并在iPad上找到我需要的部分数据。
我可以一次加载所有数据,而不仅仅是使用它。这肯定会使我免于所有的XML加载和解析,但后来我会有500kB NSArray或其他东西。我并不特别喜欢这个主意。
我想知道是否有任何方法可以做到这一点,不会占用太多内存,也会很快。
有什么想法吗?
更新
谢谢大家的回答。所以看起来这两个选项对于这种情况最好:
我想我会尝试实现第一。
答案 0 :(得分:5)
听起来像使用数据库的完美案例,无论是直接使用SQLite还是通过Core Data。这正是数据库的作用,可以快速,轻松地访问大型数据集的各个部分。
是否有令人信服的理由将数据保存在一个巨大的XML文件中?
答案 1 :(得分:3)
500 KB真的不是那么多。从透视角度来看,在iPad上加载全屏图像作为背景使用2.9 MB。
所以,我个人只是将所有数据加载到内存中并直接操作。
我也会从XML转换为存档的NSArray或NSDictionary。这应该使初始加载非常快。
答案 2 :(得分:0)
您可以使用标准C调用和数据结构来读取和处理文件。所以,你在C中提高效率的任何事情都可以正常工作。
答案 3 :(得分:0)
使用(二进制)plist代替。当它完全适合内存时,确实没有必要使用基于CoreData / SQL / stream的XML解析来使其过度复杂化。
通过使用SQLite而不是在启动时读取整个plist,可能会减少加载时间,但可能会增加访问时间成本,在您点击它之前确实不值得担心。如果这是一个很大的交易,你可以做很多简单的事情,比如将每个“部分”保存到一个单独的文件中。
答案 4 :(得分:0)
你也可以使用GDataXML(http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml)它支持XPath表达式,这样只需要很容易获得你想要的部分。