我必须使用标准的共享UserDefaults对象吗?

时间:2019-02-26 19:37:41

标签: ios nsuserdefaults userdefaults

按照惯例,在处理UserDefaults时,我们使用它的standard对象。但是,使用标准UserDefaults应该设置/获取可从新实例访问的值,反之亦然。要澄清:

let object = UserDefaults()
object.set(101, forKey: "number1") // setting via a new object
UserDefaults.standard.integer(forKey: "number1") // getting via standard
// 101

UserDefaults.standard.set(102, forKey: "number2") // setting via standard
object.value(forKey: "number2") // getting via the new object
// 102

我认为standard不以“语法糖”存在,仅出于此目的创建单例类似乎并不明智。

所以:

  • 使用standard而不是UserDefaults()有好处吗?如果有,那是什么?可能与套件有关吗?
  • 如果背后有东西,我们为什么还能声明UserDefaults()

1 个答案:

答案 0 :(得分:5)

Calling UserDefaults() is the same as calling UserDefaults(suiteName: nil).

Calling UserDefaults(suiteName: nil) returns an object that behaves like UserDefaults.standard

  

如果将nil传递给此参数,则系统将使用standard类方法使用的默认搜索列表。

因此,使用UserDefaults()代替UserDefaults.standard没有任何优势。

使用UserDefaults.standard代替UserDefaults()的优点是仅存在一个UserDefaults.standard对象,因此与使用UserDefaults.standard相比,它可能更快,使用更少的内存。通过调用UserDefaults()创建新对象。