NSUserDefaults 性能问题

Alb*_*haw 4 performance nsuserdefaults ios

我有一个游戏,我不断地保存用户进度。这是一款进度非常快的游戏,在游戏中的某些时刻,大量的用户进度可能每秒发生 6 次,这需要我在 NSUserDefaults 中存储一些进度变量并每秒同步 6 次。这在我的 iPhone6s 64GB 上运行良好,但我担心 iPhone4 16GB 可能无法处理。

但我无法测试它,因为模拟器对于此类事情并不真正准确,而且我没有较慢的设备。我似乎也无法在文档中找到有关 NSUserDefaults 性能报告的许多详细信息。有人对这个话题有了解吗?

我正在考虑将变量存储在本地 NSDictionary 中,我将在 .h 中定义,然后在 appWillResignActive 期间保存并同步 NSUserDefaults 一次,但我担心在崩溃、设备电池耗尽等情况下数据丢失。我想我可以有一个 NSTimer,每 5 秒左右保存一次数据,并在 appWillResignActive 上保存数据,以最大限度地减少崩溃时的损失;我不想重写大量代码,尽管 NSUserDefaults 可能能够在较小的设备上处理得很好。

rma*_*ddy 7

NSUserDefaults只是NSDictionary记忆中的一个。只要您不是synchronize每次设置值时都不必要地调用,就不会有任何问题。操作系统每隔一段时间就会保留内存中的表示形式。当然不是每秒多次。

因此,NSUserDefaults您想经常使用就可以使用。仅在极少数情况下调用,synchronize例如当您的应用程序变得不活动或进入后台时。


Dun*_*n C 6

不要每秒调用同步 6 次。(不要每秒执行 6 次任何基于磁盘的操作。)系统会为您保存用户默认值。正如你所说,在appWillResignActive中调用synchronize是合理的,或者在级别之间。

如果发生崩溃,预计会丢失一些数据。然而,一个编写良好的应用程序不应该崩溃。如果您经常崩溃,那就是您的问题,而不是同步用户默认值。(并不是说你的应用程序这样做)