2015-02-10 28 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

相關問題