我正在使用包含所有應用程序數據的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. 最好的方法來處理OOME android
- 4. 最好的蟒蛇排序算法來處理大數
- 5. 最好的處理方法
- 6. 最好的做法來處理錯誤在多語言應用程序
- 7. 在Javascript變量中處理大數據:不好的做法?
- 8. 什麼是最好的Python Zip模塊來處理大文件?
- 9. 處理NumberFormatExeption的最佳做法
- 10. 處理UI事件的最佳做法
- 11. 通過WCF處理大型進口產品的最佳做法?
- 12. 處理大型WCF服務的最佳做法
- 13. 處理大型JSON文件時的最佳做法
- 14. 最好的方法來處理401與春天的錯誤android
- 15. 最好的方法來處理多個類的事件?
- 16. 處理DynamoDB的最佳做法batchGetItem的未處理鍵
- 17. 處理表單處理的最佳做法
- 18. wcf連接處理最佳做法
- 19. 最佳做法異常處理
- 20. 簡單的方法來合併plists?
- 21. 最好的方法來處理來自肥皂的哈希響應
- 22. 最好的方式來處理管理表格軌道
- 23. 最好的方式來讀取和處理大於0.5GB的數據文件C
- 24. 最好的方式來做TDD和CSLA
- 25. 網頁設計的做法,以最好地處理各種設備
- 26. 使用AppDelegate進行數據處理和處理是不是很好的做法?
- 27. 處理/清理用戶名(口音,標點,...)的最佳做法?
- 28. 最好的做法是大寫的C#(吸氣TOUPPER)
- 29. 最好的做法是綁定uncaughtException事件來處理callback nodejs中發生的錯誤?
- 30. HTML:最快/最好的方法來更新一個大表
你知道你幾乎沒有任何優勢重新生成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