2015-02-10 56 views

回答

0

属性列表只是一个NSDictionaryNSArray。该文件必须作为整体来读取或写入。这意味着整个事情都在记忆中。如果只改变一点,整个文件必须重写。

如果plist中的数据太多,则可能会导致内存不足,读取和写入变得效率低下。

当你有很多数据时,你很少一次在内存中需要它。有了大量数据,您通常只需要一次更新小数据或添加新数据。在这一点上,有更好的选择,如数据库(SQLite或核心数据)。

0

从理论上讲,您可以将大量数据存储在属性列表中,但是在一定的大小下它不可行。您需要将整个属性列表读入内存才能使用它。你无法只阅读你需要的部分。这限制了你的内存数量。

然后,如果你改变了你的巨大属性列表中的一些值,你将不得不把整个东西写到磁盘上。不可能只写更新的部分。

例如:您有一个属性列表,该列表是10000个字典的数组,您可以在单个字典中更改值。如果要保存所有10000个字典,则必须将其写入磁盘,即使9999个字典没有更改。这可能需要很长时间,这与项目数量或O(n)成线性关系。如果有两倍的项目,这需要两倍的时间。

如果您将其与数据库(如Core Data可以使用的sqlite)进行比较,您将看到数据库只需编写单个已更改记录,无论有多少个。所以它总是需要同一时间,不管有多少项是O(1)。

它也很难与他们合作。你只需要字典,数组,字符串,数字等等。这可能是你需要存储的所有数据,但是在内存中你通常需要使用自己的类。这是属性列表不能做的另一件事。在加载时,您将不得不循环遍历整个属性列表以创建模型对象,并且保存时您必须反过来执行该过程。这又是缓慢的,而这样的代码写起来并不是很有趣。

属性列表也非常“仅限Apple”。所以如果你想与其他平台交换你的文件,你必须在那里做更多的工作来读写这种格式。理论上苹果甚至可以改变格式。

但是,如果您将整个文件加载到内存中,并将其完全写出来,那么您可以使用大型属性列表文件(如果您可以忍受其他限制)。

+0

不错的描述。但我不明白突出显示的一点'那么如果你在你的巨大财产清单中改变了一些值,你将不得不把整个东西写到磁盘上。不可能只写更新的部分。“你能解释一下这个更详细的内容吗?你能举个例子吗?谢谢。 – Bir 2015-02-11 10:18:19

+0

添加了对此的解释,希望它有帮助。 – Sven 2015-02-11 16:50:42

+0

谢谢Sven回答我的问题。你能建议任何解释plist限制的视频教程吗?我见过很多教程,但他们只解释什么是plist,以及如何使用,但没有说明局限性。 – Bir 2015-02-12 04:22:39

相关问题