是否必须调用NSUserDefaults同步方法?

Bal*_*ran 13 nsuserdefaults ios

请任何人,帮我:在调用NSUserDefaultssynchronize()方法强制?如果我不打电话,会发生什么?没有它我的应用程序工作正常.

Coy*_*Bit 20

不,它不再是强制性的.Apple :

此方法是不必要的,不应使用.

  • 然而,文档并没有说明这个说法是从哪个 iOS 版本开始的。除了我在 iOS 12 设备上的测试中,如果我在保存值几秒钟后杀死应用程序,我有时会丢失没有调用同步我保存的值的设备。 (2认同)
  • 即使在 iOS 13 上,如果您在写入值后立即终止应用程序,则在不调用同步的情况下也不会保存该应用程序。 (2认同)

luk*_*302 14

来自文档:

因为此方法是定期自动调用的,所以只有在您无法等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容,请使用此方法你没有做任何改变.

这意味着如果你在某些东西被写入默认值后立即杀死应用程序而没有定期间隔捕获它,它将会丢失.你可能没有在写入事件后立即杀死应用程序,这就是为什么你的应用程序似乎到目前为止工作正常.

  • 写作的系统间隔是多少?文档(一如既往)非常不明确. (7认同)
  • 这个盖子会崩溃吗?例如,如果您写入默认值,不同步以及应用崩溃后的某个时间会发生什么。我相信在这种情况下,您将丢失您的更改。那么最好在写入后始终保持同步? (2认同)
  • 这个答案已不再适用,因为它引用了旧文档.@ CoyBit的[回答](/sf/answers/3311933131/)现在是正确的. (2认同)

小智 5

通常它工作得很好,你只需要在特殊情况下使用它,例如当应用程序在写入 NSUserDefaults 后直接关闭时。所以你可以简单地将synchronize方法添加到相应的AppDelegate-method中。


Dun*_*n C 5

正如其他人所说,您通常根本不需要调用同步。

通常系统会为您调用它,以便写入您的默认更改。

然而,在使用 Xcode 时,通过按命令句点或单击停止按钮来终止应用程序是很常见的。在这种情况下,它会在没有警告的情况下终止应用程序,并且您的用户默认更改很可能不会被写出,并且会丢失。

这可能是好事也可能是坏事,具体取决于您想要什么。这确实令人困惑。

您可以通过在每次进行更改时或在某个时间间隔调用同步来“修复”它。然而,这确实会减慢您的应用程序的速度并增加其电源需求(两者都非常小)。如果您处于循环中,将更改写入 10,000 个服务器或核心数据记录,并且在每次传递后更改用户默认值,然后在之后调用同步每一项都可能对应用程序速度和电池寿命产生可衡量的影响。然而,在大多数情况下,您不太可能注意到其中的差异。