2017-02-24 33 views
0

我知道plist是做什麼的,但plist的一般用途是什麼?何時使用plist?

用它來寫/讀數據是好主意嗎?

對不起,我有問題。 謝謝

+1

「我知道plist是做什麼的」它是做什麼的? – matt

+0

它將數據存儲在詞典類型的根目錄中......當我創建swift項目時,它帶有信息。plist,它只是存儲版本信息,基本故事板等。 –

+0

plists用於應用程序相關的東西,如你已經提到的info.plist,它告訴操作系統有關你的應用程序的重要事情。它在其他地方用於首選項包設置,我認爲NSDefaults使用plists。 plist類似於其他操作系統上無處不在的'.ini'文件,您是否希望使用plists來存儲用戶數據或元數據取決於數據的複雜程度,許多應用程序都需要更復雜的數據持久性,即NSCoder或核心數據。 – joeybladb

回答

1

假設你的應用程序有一個很大的常量,就像世界上所有國家按字母順序排列的名字一樣。這是一串字符串。你將如何創造這個常數?

一種方法可能是在代碼中鍵入整個數組,一個非常大的數組。

將此文件配置爲.plist文件並在應用程序啓動時將文件讀入陣列可能會更容易。

因此,這是.plist文件的一種用法:它是以規範格式呈現數據的文本呈現,您需要在應用程序的生命週期中使用該數據。

當然,同樣的事情是相反的;您可以在應用程序運行時將一組字符串作爲.plist文件保存,以便在下次運行應用程序時再次讀取它。 (這實際上是UserDefaults的工作方式。)

+0

嗯...我明白了,所以plist更像是靜態持有者。在移動應用程序中動態編寫(更新)是不是個好主意? –

+0

在我的第二個示例中(「in reverse」)它可能肯定會動態更新。這只是一個方便的格式,用於序列化t o磁盤。 – matt

+0

如果您希望它被動態更新,它可能不是plist的最佳用途。將其視爲UserDefaults。如果他們不斷變化,最好先使用Dictionary,一旦確定不會再發生更改,請寫入文件。否則,你會引入不斷讀寫文件的開銷。 – SagarU

0

將plist想象爲基於文件的Dictionary(或NSDictionary)的實現。你所擁有的是鍵值對,你可以將它們解析並用作邏輯的一部分。 如果您可能已經觀察到,每個項目中都會有一個Info.plist文件。它存儲您可能要添加的不同配置的值。一個例子是NSAppTransportSecurity

一旦你的文件中的值,你可以使用它作爲:

var configDict: NSDictionary? 
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") { 
    configDict = NSDictionary(contentsOfFile: path) 
} 
if let dict = myDict { 
    // Use configDict here 
} 

請記住,你不只是侷限於隨附捆綁默認的Info.plist該項目。你也可以創建一個你自己的。考慮一下您在啓動時獲取多個配置的場景。您可以將它保存爲plist並稍後參考。

回答問題的第二部分時,如果以非常短的間隔執行讀取和寫入文件,看起來像是不必要的開銷。最好使用本地字典變量,然後以更長的時間間隔寫入,或者在確定已完成更改時寫入。 Plist更像是一種持久性存儲。因此,當應用程序進入後臺或用戶殺死應用程序時,您可以選擇寫入文件。

注意:請記住,plist本質上是文件系統中的普通文件。沒有什麼可以阻止某人閱讀(我知道沙盒)。這就是爲什麼明智的做法是不要將任何密碼存儲在plist中(也不在UserDefaults中)。

+0

是的,但是使用plist作爲我的移動應用程序的數據庫是否合適?我嘗試了NSObject和Realm,但是效果不好.Plist確實適用於移動應用程序... –

+0

問題之前已經用Swift標記過了,同時,這些標籤被編輯了,我馬上刪除了評論! –

+0

我的不好,我把代碼改成了Swift。 – SagarU

0

當需要存儲少量持久數據時,移動器很方便。該API很簡單。不建議大plist文件。 Apple suggests less than a few hundred kilobytes.您不會使用plist來存儲用戶生成的數據,因爲隨着時間的推移,它們可能會超過此限制,僅將其用於您所控制大小的數據。

+0

感謝您的來源。讚賞 –

+0

如果它對您有幫助,您可以將答案標記爲正確 – SagarU