如果我没有进行更改,为什么还需要同步NSUserDefaults?

时间:2014-01-01 06:08:26

标签: ios macos cocoa-touch cocoa nsuserdefaults

-[NSUserDefaults synchronize:]的文档内容为:

  

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

我想知道粗体部分何时可能发生?我的意思是如果没有对用户默认值进行任何更改,那么它会反映磁盘上的值吗?为什么我必须调用synchronize来更新活动对象?我错过了一些明显的东西吗?

3 个答案:

答案 0 :(得分:3)

想象一下,当您通过[NSUserDefaults standardUserDefaults]使用共享默认对象时,磁盘上的plist文件会因任何原因而发生更改。除非您调用synchronize来更新共享对象,否则您的默认对象将无法识别此更改。

答案 1 :(得分:3)

在iOS上,如果用户在“设置”应用中更新内容,就会发生这种情况。

在OSX上,如果您的偏好设置与其他应用分享,或者系统范围的设置(例如,当前语言)发生变化,则会发生这种情况。但是,从那时起NSUserDefaults已经更新,以便自动处理,并在外部发生变化时重新读取数据。

请注意,对于后一种情况,文档已过期。我已经提交了关于文档的错误报告。

答案 2 :(得分:1)

可以(可以)在应用之间共享用户默认值。有一个全球域名。