ObjC:写入.plist,优化方式?

时间:2012-07-10 11:21:52

标签: objective-c ios file-io plist

例如,阅读此article,将NSDictionary写入plist看起来非常简单。现在,如果我只想修改现有plist的一行:有没有办法更新行而不重写整个文件?

就像“在更新数据库表中的行时,我不必重写整个表”?

谢谢, 学家

4 个答案:

答案 0 :(得分:3)

首先:plist是非常简单的数据,所以不应该有优化读写的问题。好像您需要优化它,这意味着您需要更改应用程序设计。

第二:plist基本上是一个xml文件,所以你当然可以使用xml解析器。

答案 1 :(得分:1)

理论上,您可以在新值的字符串表示长度与旧值的字符数精确相同的条件下更快地进行修改。然而,这将是微优化的一个坏例子:与重写整个表可能需要相当长时间的数据库不同,就时间而言,重写整个plist应该不被注意。用于定位和覆盖文件中旧值的代码在任何标准下都不会很好。它没有机会匹配重写整个事物的三行“读 - 修改 - 写”代码片段的清晰度。

这假定您使用属性列表用于其预期目的,即存储相对少量的数据。如果您使用plist存储中等到大量的数据,可能需要切换到使用数据库,其中允许更新单个行。

答案 2 :(得分:1)

感觉在哪里?

尽管已经说过,但是那个使用XML的plist是为少量数据而设计的,只有当新值不对长度做任何改变时才能正常工作(XML中的字符串表示)你的价值,几乎没有任何讨价还价。

坦率地说,我不知道群集(或者在iOS'文件系统中命名的可分配磁盘空间的最小部分)的大小是什么,但我不希望它比一般的平均大小小得多。 plist文件。在我知道的所有文件系统中,集群将始终一次写入。即使程序员只是更改了一个字节并尝试只将一个字节写回文件,操作系统也会将完整的集群写入磁盘(或者我们仍称之为磁盘的任何东西:)。

意义 - 即使你努力,你也很难从那次尝试中获得任何东西。 当然,除非您的数据结构相当大,并且对于plist文件可能很复杂。在这种情况下,正如已经说过的那样,考虑更改您正在使用的数据存储方法。

答案 3 :(得分:0)

来自an other answer


你有:

  1. 一个plist文件
  2. 加载此plist的容器(例如NSMutableArray
  3. 从该容器中获取值的表视图。
  4. 通过表格视图修改plist:

    1. 更改容器中的值
    2. 将容器写回plist文件。