了解 UserDefaults 注册方法

Understanding the UserDefaults register method

首先,我要声明这不是抱怨,我只是想了解 register(defaults: []) 方法是如何工作的。

我在 didFinishLaunchingWithOptions 方法中使用 UserDefaults register(defaults: []) 方法来注册我所有 UseDefault 键的默认值,一切正常。

我的问题是,为什么每次调用 didFinishLaunchingWithOptions 方法时 register(defaults: []) 方法中的值都不会重置?

我不想让他们休息我只是想了解为什么。

我有以下代码...

func application(...didFinishLaunchingWithOptions...) -> Bool {

    UserDefaults.standard.register(defaults: [
        keyUserName:"",
        keyHasCar:false
        ])
}

这就是我感到困惑的原因,当应用程序运行时,它会按预期保存默认值,然后,如果稍后在应用程序的某个地方修改了这些值,并且在应用程序被终止并重新启动后,didFinishLaunchingWithOptions 再次被调用,但值不会被重置,但如果我向数组添加一个新键,它会被保存,但其余键不会被重置,只有新键被添加为默认值。

同样,我不想重置这些值,我只需要了解 register 方法是如何工作的。

来自 register(defaults:) 的文档:

If there is no registration domain, one is created using the specified dictionary, and NSRegistrationDomain is added to the end of the search list.

The contents of the registration domain are not written to disk; you need to call this method each time your application starts.

这意味着注册的默认值充当您正在使用的正常用户默认值的后备。注册的默认值不会覆盖或替换标准用户默认值。

当您尝试从 UserDefaults.standard 中查找密钥时,如果该密钥不存在,则会在注册的默认值中查找并返回结果(如果有)。

一旦您在 UserDefaults.standard 中设置了一个值,当然是为该键返回的值。如果您从 UserDefaults.standard 中删除密钥,则会再次使用注册的默认值。