NSUserDefaults - 您的应用程序的密钥名称是否应完全合格?

时间:2016-09-29 18:34:00

标签: ios nsuserdefaults

我有一个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" 

2 个答案:

答案 0 :(得分:7)

您的应用的用户默认设置仅供您的应用使用。但是,您的应用可能包含大量用户默认值。这可以包括您自己的代码,第三方代码和Apple的框架。

为避免任何密钥名称冲突的可能性,所有第三方代码当然应使用完全限定的密钥名称。我相信Apple添加的任何密钥都已经这样做了。

作为一名应用程序开发人员,我至少在我的密钥前面添加我的应用程序名称是安全的。完全限定的名称很好,但可能没有必要。

我使用“MyApp.foo”。

答案 1 :(得分:1)

您只需考虑应用程序的名称即可,因为您的应用程序是沙盒式的,无法实际访问属于其他应用程序的UserDefaults值。

来自NSUserDefaults的文档:

  

沙盒应用无法访问或修改任何其他应用的偏好设置   应用程序。 (例如,如果您使用以下内容添加其他应用的域名   addSuiteNamed:方法,您无权访问该应用程序   首选项。)

     

尝试访问或修改其他应用的首选项则不会   导致错误,但是当你这样做时,macOS实际上是读写   位于应用程序容器内的文件,而不是实际的文件   其他应用程序的首选项文件。

https://developer.apple.com/reference/foundation/nsuserdefaults?language=objc