首页 > 解决方案 > 我必须使用标准共享 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不作为“语法糖”存在,为此目的创建一个单例类似乎并不明智。

所以:

标签: iosnsuserdefaultsuserdefaults

解决方案


调用UserDefaults()与调用相同UserDefaults(suiteName: nil)

调用UserDefaults(suiteName: nil)返回一个行为如下的对象UserDefaults.standard

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

所以使用UserDefaults()代替没有任何优势UserDefaults.standard

使用UserDefaults.standard而不是的优点UserDefaults()是只存在一个对象,因此它可能比通过调用创建新对象 UserDefaults.standard更快并且使用的内存更少。UserDefaults.standardUserDefaults()


推荐阅读