我正在使用包含所有应用程序数据的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