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

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

1)从Settings.bundle读取Root.plist到一个字典中。

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

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

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

所以我想弄清楚什么时候和为什么我应该使用registerDefaults:什么时候/为什么我应该使用setValue:forKey:相反?

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

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

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

只有当你第一次选中“是否设定了这个值?不行,现在设置。” 这比使用registerDefaults:更具代码和成本registerDefaults:

你应该使用registerDefaults:来设置默认值。 你应该使用setValue:forKey:来保存被主动设置的值。

还记得在Mac上也存在NSUserDefaults 。 在那里,用户可以用defaults命令直接访问设置,所以程序不是唯一可以修改这个存储的实体。