我必须使用标准共享 UserDefaults 对象吗?
Posted
技术标签:
【中文标题】我必须使用标准共享 UserDefaults 对象吗?【英文标题】:Do I have to use standard shared UserDefaults object? 【发布时间】:2019-02-26 19:37:40 【问题描述】:按照惯例,在处理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】: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
可能比通过调用@ 创建一个新对象更快并且可能使用更少的内存987654335@.
【讨论】:
以上是关于我必须使用标准共享 UserDefaults 对象吗?的主要内容,如果未能解决你的问题,请参考以下文章
与应用程序和扩展程序共享时,UserDefaults 数据存储在哪里?
在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults
Xcode 8:类型“UserDefaults”没有成员“标准”