我必须使用标准共享 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”没有成员“标准”

Swift:如何检查 UserDefaults 是不是存在,如果不保存选择的标准值?

用于单元测试的 UserDefaults 实例?

将对象保存到确认协议的 UserDefaults(使用面向协议的编程范例)