新手问题。如果我将一个对象设置到 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/