如果应用程序在10秒内死亡,NSUserDefaults丢失新保存的数据

我正在寻找比NSUserDefaults更快的方式来保存用户的喜好。 我发现如果应用程序在写入NSUserDefaults大约10秒钟内死亡,它将不会永久保存。 我使用默认值保存自定义铃声的path,自定义图像的path,地图坐标,基本上只是用户定义的偏好。 使用核心数据更好的select? SQLite的? 什么被接受为最快和最轻量级?

您需要确保调用同步以立即保存数据。

[[NSUserDefaults standardUserDefaults] synchronize]; 

从苹果的类参考 :

因为此方法是定期自动调用的,所以只有当您不能等待自动同步(例如,如果您的应用程序即将退出),或者如果要将用户默认更新为磁盘上的内容你没有做任何改变。

而要回答你的第二个问题,这实际上取决于你想存储多less数据。 NSUserDefaults被devise为存储非常less量的数据(用于首选项),例如切换开关的状态等等。您可以在这里存储图像和铃声的path,但这不是明智的build议。 我的意思是你可以,但可能不应该。

核心数据是一个更好的方法,如果你打算存储这些path的很多,因为它是非常可扩展性和performance非常好。 总的来说,如果你需要存储大量的数据,用户核心数据,或作为另一种替代方式将path存储在文档目录中的plist中。