为什么使用registerDefaults:而不是setValue:forKey:?

时间:2012-02-06 20:03:06

标签: ios nsuserdefaults

当我为我的应用设置默认首选项时,我正在执行以下操作:

1)从Root.plist内部阅读Settings.bundle到字典中。

2)我测试是否设置了首选项,如果不是,我通过[NSUserDefaults standardUserDefaults] registerDefaults:]

注册我的默认字典

问题是,使用registerDefaults:注册的默认值不会转到持久性存储,因此如果用户从未更改其首选项,那么每次应用启动时,我都会读取默认首选项并使用NSUserDefaults注册它们。

我可以使用registerDefaults:而不是使用setValue:forKey:,并将我的默认设置转到持久存储,而不需要构建&在每次发布时注册字典。但是,Apple的documentationsample code都指向registerDefaults:

所以我想弄清楚何时以及为什么要使用registerDefaults:以及何时/为什么我应该使用setValue:forKey:

1 个答案:

答案 0 :(得分:5)

  

问题是,使用registerDefaults注册的默认值:不要去持久存储,所以如果用户从不更改他们的首选项,我会读取我的默认首选项,并在每次启动应用时使用NSUserDefaults注册它们。

是。为什么这是一个问题?为什么要在代码中写入你拥有的东西?

  

而不是使用registerDefaults:我可以使用setValue:forKey:并将我的默认设置转到持久性存储,绕过了构建和安装的需要。在每次发布时注册字典。但是,Apple的文档和示例代码都指向registerDefaults:。

只有你第一次检查“这个值是否设定?否?好的,现在设置它。”这比使用registerDefaults:更多的代码和成本。

您应该使用registerDefaults:来设置默认值。您应该使用setValue:forKey:来保存有效设置的值。

另请注意,Mac上也存在NSUserDefaults。在那里,用户可以使用defaults命令直接访问设置,因此程序不是唯一可以修改此商店的实体。