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

Posted

技术标签:

【中文标题】如果我没有进行更改,为啥我需要同步 NSUserDefaults?【英文标题】:Why would I need to synchronize NSUserDefaults if I haven't made changes?如果我没有进行更改,为什么我需要同步 NSUserDefaults? 【发布时间】:2014-01-01 06:08:26 【问题描述】:

-[NSUserDefaults synchronize:] 的文档内容如下:

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

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

【问题讨论】:

更多详情请查看:***.com/questions/17183183/… 【参考方案1】:

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

在 OSX 上,如果您的偏好设置与其他应用程序共享,或者系统范围的设置(例如,当前语言)发生更改,通常会发生这种情况。但是,从那时起 NSUserDefaults 已更新为自动处理此问题,并在外部发生更改时重新读取数据。

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

用户默认设置可以(可以)在应用之间共享。有一个全局域。

【讨论】:

以上是关于如果我没有进行更改,为啥我需要同步 NSUserDefaults?的主要内容,如果未能解决你的问题,请参考以下文章

如果我没有更改状态的引用,为啥 React 会调用渲染函数? [复制]

为啥我安装软件老是要管理员权限进行安装

为啥 git 不定期运行 git fetch?

为啥我在for循环中进行了一些更改后键的值没有改变

为啥 Sencha Touch 没有同步回调?

为啥使用 HttpClient 而不是 HttpWebRequest 进行同步请求