iOS - setObject与Synchronize

时间:2014-08-31 05:17:17

标签: ios swift nsuserdefaults

新手问题。如果我将对象设置为NSUserDefault,我还需要同步以确保对象永久返回NSUserDefault数据库吗?我想我要问的是," setobject"将对象永久地放回到数据库中或者放入需要同步的一些临时存储中以确保永久存储?

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

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

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

userDefaults.synchronize() 

我的代码在没有同步的情况下工作,这意味着我不需要它。但是我想确保跳过同步的使用在将来不会引起另一种情况的问题。

提前致谢。

2 个答案:

答案 0 :(得分:9)

在iOS 7及更早版本:

当你调用-setObject:forKey:时,NSUserDefaults将来会安排一个同步操作大约10秒钟。发生这种情况时,到目前为止的所有内容都会保存到持久存储中。这里的想法是你可以自由地使用set和get方法,而无需每次都花费大量的性能成本。

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

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

答案 1 :(得分:-2)

您可以使用synchronize立即更新数据库。如果您不使用Synchronize,IOS将为您执行此操作,但仅定期执行。最佳做法是每次进行任何更改时都使用同步,这样,如果您的应用程序崩溃,用户所做的所有更改都不会丢失。