在 iOS 上保存大数组的最佳方法

Posted

技术标签:

【中文标题】在 iOS 上保存大数组的最佳方法【英文标题】:Best method to save large array on iOS 【发布时间】:2016-02-12 16:55:11 【问题描述】:

我编写了一个与 BLE 设备接口的 ios 应用程序 - BLE 设备发送 iOS 设备数据,应用程序分析数据然后保存。 iOS 应用每秒接收一次数据,因此我保存读数的数组(如NSString)会很快变大。

该应用程序已启用在后台运行,到目前为止,我一直在使用NSUserDefaults 来保存这个大数组。我对我的应用程序进行了跟踪,发现它在后台使用了 iPhone 6 的 3% 的 CPU,并发现 NSUserDefaults 导致了这种情况。我阅读了它,发现 NSUserDefaults 用于此目的是多么低效。

现在,我想摆脱这种方法并使用不同的方法。我已经阅读了一些这样的方法,比如将数据保存到 CoreData、Plists 或纯文本文件中。这些方法的效率和实施难度如何?我之前用文本文件做过一些事情,这很容易,但我经常需要获取该文本文件的全部内容并将其加载到数组中进行解析,这似乎对内存有问题。因此,如果您有任何建议,我很乐意听取他们的意见。

【问题讨论】:

【参考方案1】:

查看Apple Performance Tips,我发现了您的问题。

简而言之:在写入磁盘之前获取大量数据,以尽量减少使用 Core Data 或 SQLite 对闪存驱动器的访问。

您可以在this link 中查看如何实现 SQLite 持久化


改进文件管理 - 性能提示

尽量减少写入磁盘的数据量。文件操作是 相对较慢,涉及写入闪存驱动器,该驱动器具有 寿命有限。一些帮助您最小化与文件相关的特定提示 操作包括:

如果您的数据包含随机访问的结构化内容,请将其存储在 Core Data 持久存储或 SQLite 数据库,特别是如果您正在处理的数据量可以 增长到超过几兆字节。

【讨论】:

谢谢,这很好用。在后台,CPU 使用率降至低于 1%。 CoreBluetooth 现在使用的 CPU 功率最大

以上是关于在 iOS 上保存大数组的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中保存和编辑数组的最佳方法是啥(json、序列化或文本)

在 iOS 中保存访问令牌的最佳实践

在 PhoneGap IOS 上缓存图像的最佳方法

在 C# 中用较小的数组复制/填充大数组的最佳方法是啥?

将数组内容保存/加载到文件的最佳方法是啥?

保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?