iOS - setObject 与同步

标签 ios swift nsuserdefaults

新手问题。如果我将一个对象设置到 NSUserDefault 中,我是否还需要同步以确保该对象永久返回到 NSUserDefault 数据库中?我想我想问的是,“setobject”是将对象永久性地放回数据库中,还是放入需要同步以确保永久性存储的临时存储中?

例如: //下面我在添加一行数据后在 NSUserDefaults 中放置了一个新的列表副本

userDefaults.setObject(newMutableList, forKey: "itemList")

//我是否还需要立即同步以确保数据库永久更新?

userDefaults.synchronize() 

我的代码在没有同步的情况下工作,这意味着我不需要它。但我想确保跳过同步的使用不会在未来的其他场景中导致问题。

提前致谢。

最佳答案

在 iOS 7 及更早版本上:

当您调用 -setObject:forKey: 时,NSUserDefaults 会在未来大约 10 秒内自行安排同步操作。发生这种情况时,到那时为止的所有内容都会保存到持久存储中。这里的想法是,您可以自由地使用 set 和 get 方法,而无需支付每次访问磁盘的显着性能成本。

在 iOS 8 上,NSUserDefaults 的工作方式不同,延迟是几毫秒,而不是 10 秒,所以 -synchronize 几乎没有用。

在 iOS 12 上,-synchronize 的所有剩余使用都是不必要的。请注意,可能仍有应用想要调用它的情况,因为它们支持 iOS 11 及更早版本。

关于iOS - setObject 与同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25589162/

相关文章:

ios - 在运行 CI 测试之前,如何强制关闭 iOS 升级对话框(和其他 Apple 对话框)?

swift - 使用密码身份验证时如何将本地主机域与我的应用程序标识符相关联?

ios - 如何将标签添加到 textField 类或动画占位符

swift - 如何快速获取 NsKeyValueObservationinfo?

iOS:自定义对象的 int 变量在 NSUserDefaults 中返回 nil

ios - 使用 NSUserDefaults

ios - 如何在 Swift 3 中解包一个模态类对象

android - 在 iOS 项目中使用 Java 库

ios - FBSDKShareButton 即使在用户登录后也被禁用?

ios - iOS 升级是否保留 NSUserDefaults?