我应该如何在我的iPhone应用程序中存储和使用我的500kB数据文件?

时间:2010-11-20 21:37:52

标签: iphone objective-c cocoa

所以我有0.5MB的XML文件,包含我的iPhone应用程序的数据。这一切都是只读的,所以我不必费心写作。

目前我正在使用NSXMLParser来加载数据。

我很喜欢NSXMLParser,我创建了一个只加载我当前需要的部分数据的类。因此,一旦解析了文件,它就会占用最少的内存。

但它很慢。解析XML文件需要500-1000毫秒,并在iPad上找到我需要的部分数据。

我可以一次加载所有数据,而不仅仅是使用它。这肯定会使我免于所有的XML加载和解析,但后来我会有500kB NSArray或其他东西。我并不特别喜欢这个主意。

我想知道是否有任何方法可以做到这一点,不会占用太多内存,也会很快。

有什么想法吗?

更新

谢谢大家的回答。所以看起来这两个选项对于这种情况最好:

  1. 将XML数据存档为二进制形式。它将被非常快速地处理,并且500kB实际上并没有那么多留在内存中。
  2. 如果我真的想让它具有超级内存效率,那就是SQLite或Core Data。
  3. 我想我会尝试实现第一。

5 个答案:

答案 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表达式,这样只需要很容易获得你想要的部分。