为什么使用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
命令直接访问设置,所以程序不是唯一可以修改这个存储的实体。