首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步完成前的iOS NSUserDefaults访问

同步完成前的iOS NSUserDefaults访问
EN

Stack Overflow用户
提问于 2013-06-19 05:00:25
回答 2查看 3.2K关注 0票数 1

如果我设置了一个NSUserDefault对象,并试图在同步之前访问它,那么我是否能够访问我刚刚添加的对象?

我尝试过编写代码来测试它,但是我不确定synchronization是否在我不知道的情况下发生。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 05:28:26

是的,您的应用程序可以在synchronize发生之前访问保存的首选项,如果它是在应用程序的同一运行会话期间读取周期之前保存的。为了在随后的应用程序启动期间访问信息,有必要进行同步。

苹果文档:NSUserDefaults

NSUserDefaults缓存信息,以避免每次需要默认值时都必须打开用户的默认数据库。定期自动调用的同步方法使内存缓存与用户的默认数据库保持同步。

synchronize方法将对内存中缓存的任何修改写入磁盘(Library/Preferences中的plist文件),并将未修改的内存缓存更新为最新的磁盘。该方法被周期性地调用,而不通知应用程序。

再次从docs:[NSUserDefaults synchronize]

讨论 由于此方法是定期自动调用的,因此,只有在无法等待自动同步(例如,如果应用程序即将退出时)或如果您希望将用户默认值更新到磁盘上的默认内容,即使您没有做任何更改,才使用此方法。

在我的经验中,在应用程序退出时显式调用synchronize方法,这将确保在下次启动时可以使用最新的首选项。然而,当应用程序在synchronize发生之前崩溃时,我也遇到了一些场景,因此pref不被存储。您的应用程序必须能够处理这些场景。

附加

使用NSUserDefaults存储最小的数据,不要存储巨大的数据。原因是,应用程序默认是在应用程序启动期间加载的,如果要加载的数据很大,那么应用程序加载时间就会增加,应用程序被Springboard杀死的可能性也会增加。

票数 7
EN

Stack Overflow用户

发布于 2013-06-19 05:11:56

[NSUserDefault synchronize];的目的是使用户的默认值立即写入磁盘。

关于这个的

我不确定同步是否在我不知道的情况下发生。

您不需要显式地调用[NSUserDefault synchronize]来存储值,iOS已经在适当的时间(比如进入后台时)这样做了。因此,除非您想立即存储该值,否则可以避免该行。实际上,如果每次设置值时都调用synchronize,则会导致性能问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17183183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档