NSUserDefaults的性能问题

时间:2016-05-27 20:22:54

标签: ios performance nsuserdefaults

我有一个游戏,我不断保存用户进度。这是一个非常快速的进步游戏,并且在游戏中的某些点上,每秒可能发生6次大量用户进展,这需要我在NSUserDefaults中存储一些进展变量并且每秒同步6次。这在我的iPhone6s 64gb上工作正常,但我担心它可能不是iPhone4 16gb可以处理的东西。

我无法测试它,因为模拟器对于这样的东西并不是很准确,而且我没有更慢的设备。我也似乎无法在文档中找到有关NSUserDefaults性能报告的许多细节。有没有人对这个话题有任何了解?

我正在考虑将变量存储在我将在我的.h中定义的本地NSDictionary中,然后在appWillResignActive期间保存和同步NSUserDefaults一次,但我担心在发生崩溃,设备电池耗尽等情况下丢失数据我想我可以有一个NSTimer并且每5秒左右保存一次数据,并且还可以节省appWillResignActive,以便在发生崩溃时将损失降至最低;我宁愿不要重写大量的代码,尽管NSUserDefaults可能能够在较小的设备上处理这些代码。

2 个答案:

答案 0 :(得分:4)

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

如果崩溃,预计会有一些数据丢失。但是,一个写得很好的应用程序不应该崩溃。如果您因任何规律性而崩溃,那就是您的问题,而不是同步用户默认设置。 (不是说你的应用程序那样做)

答案 1 :(得分:3)

NSUserDefaults只是内存中的NSDictionary。只要您在每次设置值时都没有不必要地致电synchronize,您就不会有任何问题。操作系统将每隔一段时间保持内存中的表示。当然不是每秒多次。

因此,请根据需要随时使用NSUserDefaults。只有在您的应用变为无效状态或进入后台时,才会在极少数情况下致电synchronize