我必须使用标准的共享 UserDefaults 对象吗?
Do I have to use standard shared UserDefaults object?
作为惯例,在处理UserDefaults
, we use the standard
对象的时候就可以了。但是,使用标准 UserDefaults
应该 set/get 可以从新实例访问的值,反之亦然。澄清一下:
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
不存在,因为 "syntactic sugar",为此目的创建一个单例 class 似乎并不明智。
所以:
- 使用
standard
而不是 UserDefaults()
有什么好处吗?如果有,那是什么?会不会跟套房有关?
- 如果背后有什么东西,为什么我们还能声明
UserDefaults()
?
Calling UserDefaults()
is the same as calling UserDefaults(suiteName: nil)
.
Calling UserDefaults(suiteName: nil)
returns an object that behaves like UserDefaults.standard
:
If you pass nil
to this parameter, the system uses the default search list that the standard
class method uses.
所以用UserDefaults()
代替UserDefaults.standard
没有任何优势。
使用 UserDefaults.standard
而不是 UserDefaults()
的优点是只存在一个 UserDefaults.standard
对象,因此使用 [=13= 可能更快并且可能使用更少的内存] 而不是通过调用 UserDefaults()
.
创建一个新对象
作为惯例,在处理UserDefaults
, we use the standard
对象的时候就可以了。但是,使用标准 UserDefaults
应该 set/get 可以从新实例访问的值,反之亦然。澄清一下:
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
不存在,因为 "syntactic sugar",为此目的创建一个单例 class 似乎并不明智。
所以:
- 使用
standard
而不是UserDefaults()
有什么好处吗?如果有,那是什么?会不会跟套房有关? - 如果背后有什么东西,为什么我们还能声明
UserDefaults()
?
Calling UserDefaults()
is the same as calling UserDefaults(suiteName: nil)
.
Calling UserDefaults(suiteName: nil)
returns an object that behaves like UserDefaults.standard
:
If you pass
nil
to this parameter, the system uses the default search list that thestandard
class method uses.
所以用UserDefaults()
代替UserDefaults.standard
没有任何优势。
使用 UserDefaults.standard
而不是 UserDefaults()
的优点是只存在一个 UserDefaults.standard
对象,因此使用 [=13= 可能更快并且可能使用更少的内存] 而不是通过调用 UserDefaults()
.