use*_*956 1 objective-c nsuserdefaults synchronize ios
如果我设置了一个NSUserDefault对象并尝试在同步之前访问它,我是否可以访问刚刚添加的对象?
我已经尝试编写代码来测试它,但我不确定在没有我知道的情况下同步是否正在发生.
是的,synchronize如果在应用程序的同一运行会话期间发生读取周期之前保存,则应用程序可以在发生之前访问保存的首选项.为了在后续应用程序启动期间访问信息,必须进行同步.
来自Apple文档:NSUserDefaults
NSUserDefaults缓存信息以避免每次需要默认值时都必须打开用户的默认数据库.synchronize方法(定期自动调用)使内存缓存与用户的默认数据库保持同步.
该同步方法写入任何修改内存缓存到磁盘(plist文件Library/Preferences),并更新未修改的内存缓存到最新的磁盘上.此方法会定期调用,而不会通知应用程序.
再次来自docs: [NSUserDefaults synchronize]
讨论
因为此方法是定期自动调用的,所以只有在您不能等待自动同步时(例如,如果您的应用程序即将退出)或者您希望将用户默认值更新为磁盘上的内容,请使用此方法虽然你没有做任何改变.
根据我的经验,synchronize在应用程序退出时显式调用该方法,这可确保在下次启动时可以使用最新的首选项.但是,我也遇到过应用程序在synchronize发生之前崩溃的情况,因此不会存储pref.您的应用程序必须能够处理这些方案.
附加
使用NSUserDefaults存储最少的数据,不存储大量数据.原因是,应用程序默认值是在应用程序启动期间加载的,如果要加载的数据很大,那么应用程序加载时间会增加,并且可能是应用程序被杀死了Springboard.
| 归档时间: |
|
| 查看次数: |
3045 次 |
| 最近记录: |