在iOS中高效存储大量数据

时间:2011-08-11 13:49:38

标签: iphone ios cocoa-touch ipad

我正在构建一个具有“记录”功能的应用程序,该功能可记录用户随时间的交互。随着时间的推移,我用一个表示用户输入当前状态的“状态”对象填充内存中的数组。典型的录制将产生大约5k的这些对象。

然后我使用NSKeyedArchiver archiveRootObject: toFile:归档此数据。这工作正常,但文件大小非常大(3.5兆左右)。我的问题是:

归档文件是否涉及固有的文件大小开销?如果我使用SQLite,甚至滚动我自己的文件格式,我是否可以使用更少的磁盘空间来保存这些数据?或者是减少数据磁盘大小的唯一方法是减少我存储的数字的位深度?

3 个答案:

答案 0 :(得分:2)

如果您关注的是性能,Core Data会为您提供更多粒度。在应用程序执行期间,您可以延迟加载和按部件保存,而不是加载/保存整个3.5Mb对象图。

如果您关注的是文件大小,则为binary plist format,这是SQLite file format。但是比开销更重要的是对象图和Core Data模型之间的转换有多复杂。

您可能还对以下几种文件格式的速度和性能比较感兴趣:https://github.com/eishay/jvm-serializers/wiki/不确定是否所有内容都有C,C ++或Objective-C实现。

答案 1 :(得分:2)

3.5 MB不是一个非常大的文件。但是,如果您的应用程序必须始终加载或保存3.5 MB文件,那么使用Core Data会更加智能,因为这样您只能保存已更改的数据并仅检索您感兴趣的部分 - - 不是每次都是全部。

答案 2 :(得分:0)

如果存储是主要问题,那么b / w sqlite和核心数据几乎没有什么区别。

我必须在应用程序中存储状态为UIViewControllers,我最终没有保存序列化对象,只保存了最具体的属性,并创建了一个读取该数据并重新分配这些对象的类。

然后将属性映射存储在csv中[事实上很难管理,但很像任何东西]然后压缩。