我有一个iOS应用,像往常一样,我将用户的偏好存储在NSUserDefaults
(或UserDefaults
,因为它现在在Swift中调用)。
let ud = UserDefaults.standard
let foo = 123
ud.set(foo, forKey: "foo")
ud.integer(forKey: "foo")
密钥名称是否应该很长,以防止与系统发生冲突,或者只考虑应用程序的名称是否安全?
let fooKey = "com.mycompany.myapp.foo"
// or...
let fooKey = "foo"
答案 0 :(得分:7)
您的应用的用户默认设置仅供您的应用使用。但是,您的应用可能包含大量用户默认值。这可以包括您自己的代码,第三方代码和Apple的框架。
为避免任何密钥名称冲突的可能性,所有第三方代码当然应使用完全限定的密钥名称。我相信Apple添加的任何密钥都已经这样做了。
作为一名应用程序开发人员,我至少在我的密钥前面添加我的应用程序名称是安全的。完全限定的名称很好,但可能没有必要。
我使用“MyApp.foo”。
答案 1 :(得分:1)
您只需考虑应用程序的名称即可,因为您的应用程序是沙盒式的,无法实际访问属于其他应用程序的UserDefaults值。
来自NSUserDefaults的文档:
沙盒应用无法访问或修改任何其他应用的偏好设置 应用程序。 (例如,如果您使用以下内容添加其他应用的域名 addSuiteNamed:方法,您无权访问该应用程序 首选项。)
尝试访问或修改其他应用的首选项则不会 导致错误,但是当你这样做时,macOS实际上是读写 位于应用程序容器内的文件,而不是实际的文件 其他应用程序的首选项文件。
https://developer.apple.com/reference/foundation/nsuserdefaults?language=objc