Iphone 在iOS中高效存储大量数据

Iphone 在iOS中高效存储大量数据,iphone,ios,cocoa-touch,ipad,Iphone,Ios,Cocoa Touch,Ipad,我正在构建一个应用程序,它具有“记录”功能,可以记录用户随时间的交互。随着时间的推移,我用表示用户输入当前状态的“state”对象填充内存中的数组。一次典型的记录将产生大约5千个这样的物体 然后,我使用NSKeyedArchiver archiveRootObject:toFile:存档此数据。这很好,但是文件大小非常大(3.5兆左右)。我的问题是: 归档文件时是否存在任何固有的文件大小开销?如果我使用SQLite,或者甚至使用我自己的文件格式,我是否能够用更少的磁盘空间保存这些数据?或者减少数

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

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


归档文件时是否存在任何固有的文件大小开销?如果我使用SQLite,或者甚至使用我自己的文件格式,我是否能够用更少的磁盘空间保存这些数据?或者减少数据磁盘大小的唯一方法是减少我存储的数字的位深度吗?

如果您关心的是性能,则核心数据会为您提供更高的粒度。与加载/保存整个3.5Mb对象图相比,您可以在应用程序执行期间按部分延迟加载和保存

如果您关心的是文件大小,这是,这是。但比开销更重要的是,对象图和核心数据模型之间的转换有多复杂


你可能对几种文件格式的速度和性能比较感兴趣:不确定是否所有的东西都有C、C++或Objto-C实现。

< P>如果存储是主要的关注点,B/W SQLite和核心数据将几乎没有差别。p> 我必须将UIViewController与状态一起存储在一个应用程序中,最终我没有保存序列化对象,而是只保存最特定的属性,并创建一个类来读取该数据并重新分配这些对象


属性映射随后存储在csv中[无可否认,很难管理,但很小],然后进行压缩。

3.5 MB不是一个很大的文件。但是,如果你的应用程序必须一直加载或保存一个3.5 MB的文件,那么使用核心数据会聪明得多,因为这样你可以只保存已经更改的数据,只检索你感兴趣的部分,而不是每次都检索整件事。

查看核心数据框架。苹果在开发者网站上有一个关于这个主题的必看视频。谢谢Moshe。你认为我可以通过使用核心数据而不是NSKeyedArchiver来使用更少的磁盘空间吗?存储技术不会改变数据的占用空间。如果要减小文件大小,您必须找到我们自己的方法来修剪/压缩数据。使用SQLITE和核心数据不会改变数据占用的空间量,它们只是用于写入和检索所述数据的不同方法。无论您选择何种技术,您都可以使用设备的最大存储容量。谢谢Matt。我意识到核心数据使用SQLite进行存储。我想知道数据的SQLite存储和使用NSKeyedArchiver归档对象之间的占用空间是否有任何区别。感谢您的回复。但我不是问sqlite和核心数据,我是问NSKeyedArchiver和核心数据。即使NSKeyedArchiver也会保存整个对象。因此,它也不会在最终文件大小上产生很大差异。我认为这里的关键是尽可能少地保存数据。除非你一定要保存这个物体所有的东西,它会是3.5兆乘以10左右。我需要保存大约10组不同的数据,我想在应用程序的初始下载中包含所有这些数据。这仍然只有35MB。对于一个稍大的下载,所以如果你能将其压缩到20MB以下,这只是为了更好,但作为设备上的存储,这是微不足道的。