我正在使用包含所有應用程序數據的plist文件。該文件相當大,目前我在第一次啓動時將所有內容加載到數組和字典中,並將它們保存到UserDefaults中,以便我不必再次觸摸plist。由於這需要大約10秒(iP4),我不知道是否有更快(更好)的方式來處理plist。我用儀器檢查了整個啓動過程,並通過數百個條目實際上是最快的部分。將這些處理過的東西保存到NSUserDefaults中需要很長時間。最好的做法來處理大plists?
1
A
回答
0
將plist保存到自己的文件中可能會有所幫助。這樣你可以控制讀/寫,沒有任何與NSUserDefaults相關的開銷,最重要的是,可以確保格式。也就是說,如果讀/寫產生減速,那麼你必須最小化plist文件的大小。有可能使用的NSPropertyListBinaryFormat_v1_0
一個的plist格式,能做到這一點:
參見:
+ (NSInteger) writePropertyList: (id) plist
toStream: (NSOutputStream *) stream
format: (NSPropertyListFormat)format
options: (NSPropertyListWriteOptions) opt
error: (NSError **) error
從蘋果公司的財產清單編程指南:
第一種方法[使用的NSDictionary或NSArray的將writeToFile]是 簡單 - 只需要一次方法調用而不是兩次 - 但第二種方法[如上]有其優點。它允許您將 運行屬性列表轉換爲二進制格式以及XML屬性 列表。將屬性列表 的靜態表示形式轉換回對象圖形時,還可讓您更靈活地指定這些對象是可變的還是不可變的。
0
幾點。
- NSUserDefaults可能只是一個大plist,所以爲什麼要使用它?將條目粘貼到保存內存結構的單例中。
- 如果您是在第一次加載時執行此操作,因爲您希望它是可變的,請將默認值放入資源文件夾中。當你想加載它時,檢查你是否在文檔文件夾中,如果你沒有(第一次加載),將它從資源包複製到文檔。
- 如果您使用NSUserDefaults進行持久化,只需在applicationShouldResignActive和任何其他進行重要更改的時間將數據寫入您的plist。
- 寫在後臺線程,但你可能需要在這裏做一些鎖定。
- 當加載和保存時間變得很大時,最佳實踐可能會轉移到核心數據,但在你需要這樣做之前,1-4應該給你更多的里程。
相關問題
- 1. 最好的做法來處理太多的mysql連接
- 2. HID設備。最好的方法來做事件處理?
- 3. 最好的方法來處理NSString Memeory
- 4. 最好的方法來處理OOME android
- 5. 最好的蟒蛇排序算法來處理大數
- 6. 最好的處理方法
- 7. Java異常處理的良好做法
- 8. 需要最好的數據庫來處理大量的數據
- 9. 最好的做法來處理錯誤在多語言應用程序
- 10. 在Javascript變量中處理大數據:不好的做法?
- 11. 什麼是最好的Python Zip模塊來處理大文件?
- 12. 處理NumberFormatExeption的最佳做法
- 13. 處理驗證的最佳做法
- 14. 處理UI事件的最佳做法
- 15. 尋找更好的方法來處理大量的參數
- 16. 最好的方法來處理401與春天的錯誤android
- 17. 最好的方法來處理多個類的事件?
- 18. 處理超大型數組的最佳做法? D B?
- 19. AngularJS正確/處理大量數據的最佳做法
- 20. 通過WCF處理大型進口產品的最佳做法?
- 21. 處理大型WCF服務的最佳做法
- 22. 處理大型JSON文件時的最佳做法
- 23. 最好的方法來處理wordpress頁面---插件或手動?
- 24. 最好的方法來處理Haystack導入錯誤
- 25. 最好的方法來處理多個插入
- 26. C++最好的方法來處理零除
- 27. 最好的NoSQL方法來處理1億多條記錄
- 28. 處理DynamoDB的最佳做法batchGetItem的未處理鍵
- 29. 處理表單處理的最佳做法
- 30. 最佳做法異常處理
你知道你幾乎沒有任何優勢重新生成plists? 'NSUserDefaults'也將信息存儲在plists中。 – 2013-05-02 19:37:30
您可以在GCD隊列中完成所有工作。從一開始就創建一個普通的背景隊列,給它一個讓你的plist工作的塊。像@ H2CO3建議的那樣,把所有東西都放在NSUserDefault中,並根據需要創建方法來獲取數據。不需要把它放在兩個地方。 – John 2013-05-02 19:52:01
這是因爲你有很多很多的小數據,或者你有一些巨大的NSData對象?你不應該把它們放在plist中(或者NSUserDefaults,它本身就是plist)。 – matt 2013-05-02 20:00:43