任何人请帮帮我:调用NSUserDefaults的synchronize()方法是强制的吗?如果我不调用它,会发生什么?我的应用程序没有它也能正常工作。
发布于 2017-11-16 01:06:27
No。
从iOS12开始,它不再是强制性的。苹果says
这个方法是不必要的,也不应该使用。
您可以在iOS12 release note上找到更多信息
UserDefaults
NSUserDefaults有几个错误修复和改进:
删除了同步要求。不再需要使用synchronize、CFPreferencesAppSynchronize或CFPreferencesSynchronize。这些方法将在操作系统的未来版本中弃用。
现在您不需要调用这些同步方法,NSUserDefaults和首选项实用程序的性能特征略有不同:将写入操作入队所用的时间现在由写入线程支付,而不是由调用synchronize或执行读取操作的下一个线程支付。
发布于 2016-05-27 21:47:13
从docs
因为此方法是定期自动调用的,所以仅当您无法等待自动同步(例如,如果您的应用程序即将退出),或者即使您没有进行任何更改也要将用户默认设置更新为磁盘上的内容时,才使用此方法。
这意味着,如果您在将某些内容写入默认值后立即终止应用程序,而没有定期间隔捕获它,它将会丢失。您可能还没有在写入事件之后立即终止应用程序,这就是为什么到目前为止您的应用程序似乎工作得很好的原因。
发布于 2016-05-27 21:50:54
通常情况下,它工作得很好,你只需要在特殊情况下使用它,例如,当应用程序在写入NSUserDefaults后直接关闭时。因此,您可以简单地将synchronize方法添加到相应的AppDelegate-method中。
https://stackoverflow.com/questions/37485109
复制相似问题