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

Ahm*_*d F 0 nsuserdefaults ios 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
Run Code Online (Sandbox Code Playgroud)

我会假设它standard不以“语法糖”形式存在,仅为此目的创建单例类似乎并不明智。

所以:

  • 使用standard代替有好处UserDefaults()吗?如果有,那是什么?可能与套房有关吗?
  • 如果背后有什么东西,我们为什么还能申报UserDefaults()呢?

rob*_*off 5

呼叫UserDefaults()与呼叫相同UserDefaults(suiteName: nil)

调用UserDefaults(suiteName: nil)返回一个行为类似于UserDefaults.standard

If you pass nil to this parameter, the system uses the default search list that the standard class method uses.

So there is no advantage in using UserDefaults() instead of UserDefaults.standard.

The advantage of using UserDefaults.standard instead of UserDefaults() is that only a single UserDefaults.standard object exists, so it may be faster and may use less memory to use UserDefaults.standard than to create a new object by calling UserDefaults().