什么时候以及为什么要使用NSUserDefaults的syncnize()方法?

因此,我看了关于NSUserDefaults的syncnize()方法的苹果文档。请参阅以下参考:


https://developer.apple.com/reference/foundation/userdefaults/1414005-synchronize


该页面当前显示为:


因为此方法是定期自动调用的,所以仅当您无法等待自动同步时(例如,如果您的应用程序将要退出),或者您想要将用户默认值更新为磁盘上的默认值时,才使用此方法。您尚未进行任何更改。


但是,我仍然不明白的是什么时候应该调用此方法?例如,是否应在用户每次更改应用程序设置时调用它?还是我应该相信后台api能够处理这个问题?内存中的设置更改后立即离开视图是否会导致该更改丢失?


此外,何时无法调用syncnize()导致用户设置未正确更改?


此外,调用此方法的成本(性能,内存或其他方面)是多少?我知道这涉及到磁盘读/写操作,但是这真的需要花很多精力在手机上吗?


牛魔王的故事
浏览 980回答 3
3回答

墨色风雨

如预期的那样,已弃用,如Apple Doc中所述同步()等待对默认数据库的所有未决异步更新并返回;此方法是不必要的,不应使用。原始答案synchronize打算提到被弃用这里- 不建议使用sync,并且在以后的版本中将使用NS_DEPRECATED宏进行标记。-synchronize阻塞调用线程,直到所有正在进行的设置操作完成为止。这不再是必需的。对-synchronize先前使用的替换取决于调用sync的意图。如果您已同步…—…在读取之前,为了获取更新的值:删除同步调用—…在编写后通知另一个程序读取:另一个程序可以使用KVO遵守默认值而无需通知—…在非应用程序(命令行工具,代理或守护程序)中退出之前:调用CFPreferencesAppSynchronize (kCFPreferencesCurrentApplication)—…由于任何其他原因:删除同步呼叫

元芳怎么了

Apple的文档synchronize()已更新,现在显示为:等待对默认数据库的所有未决异步更新并返回;此方法是不必要的,不应使用。
打开App,查看更多内容
随时随地看视频慕课网APP