在iOS中高效存储大量数据

我正在构build一个具有logging用户交互作用的“logging”function的应用程序。 随着时间的推移,我用代表用户input当前状态的“状态”对象填充内存中的一个数组。 一个典型的录音将导致约5k这些对象。

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

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

如果你关心的是性能,核心数据给你更多的粒度。 您可以在应用程序执行期间延迟加载和保存零件,同时加载/保存整个3.5Mb对象图。

如果你关心的是文件大小,这是二进制plist格式 ,这是SQLite文件格式 。 但是比开销更重要的是,对象图和Core Data模型之间的转换有多复杂。

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

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

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

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

然后将地图存储在csv中(虽然非常难以pipe理,但像任何东西一样小),然后压缩。