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
我会假设它standard
不作为“语法糖”存在,为此目的创建一个单例类似乎并不明智。
所以:
- 使用有没有好处
standard
而不是有好处UserDefaults()
吗?如果有,它是什么?会不会和套房有关? - 如果背后有东西,为什么我们甚至可以声明
UserDefaults()
?
解决方案
调用UserDefaults()
与调用相同UserDefaults(suiteName: nil)
。
调用UserDefaults(suiteName: nil)
返回一个行为如下的对象UserDefaults.standard
:
如果传递给此参数,系统将使用类方法使用
nil
的默认搜索列表。standard
所以使用UserDefaults()
代替没有任何优势UserDefaults.standard
。
使用UserDefaults.standard
而不是的优点UserDefaults()
是只存在一个对象,因此它可能比通过调用创建新对象 UserDefaults.standard
更快并且使用的内存更少。UserDefaults.standard
UserDefaults()
推荐阅读
- python - 如何避免在打印出字典的末尾打印逗号?
- c - 当 double 值超出 char 范围时,C 中的 Double 到 char 转换规则
- ionic3 - ionic angularx-qr 代码模板解析错误
- c# - 我的合并排序实现有什么问题
- python - 如何更改 Django 的用户名字段的 max_length
- firebase - Apple Watch 上的数据发送到 Firebase
- laravel - laravel 中的雄辩关系
- python - SQLALCHEMY - 多对多一元关系
- git - Git合并合并所有跟踪文件(快照)或更改的文件?
- python - 在 Shiny 中,Python 虚拟环境 PERMISSION DENIED(错误 126)