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

gab*_*elk 5 nsuserdefaults ios

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

1)Root.plist从里面读到Settings.bundle字典.

2)我测试是否设置了首选项,如果不是,我通过注册我的默认字典 [NSUserDefaults standardUserDefaults] registerDefaults:]

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

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

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

Rob*_*ier 5

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

是.为什么这是一个问题?为什么要在代码中写入磁盘内容?

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

只有当你第一次检查"是否设置了这个值?没有?好的,现在设置它." 这比使用更多的代码和成本registerDefaults:.

您应该使用registerDefaults:设置默认值.您应该使用setValue:forKey:保存活动设置的值.

还要记住NSUserDefaultsMac上也存在这种情况.在那里,用户可以使用defaults命令直接访问设置,因此程序不是唯一可以修改此存储的实体.