2016-09-29 5 views
3

У меня есть приложение iOS, и, как обычно, я сохраняю настройки пользователя в NSUserDefaults (или UserDefaults, так как он теперь называется в Swift).NSUserDefaults - следует ли полностью использовать имена ключевых слов вашего приложения?

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

Пользовательские настройки вашего приложения являются уникальными для вашего приложения, конечно, вы можете использовать общий контейнер для обмена данными между, например, расширений и основного приложения, но в основном вам не нужно держать ключи именными _explicticly_, это происходит _implicitly_, так или иначе. – holex

ответ

1

Вы безопасны просто думать об именах вашего приложения, потому что ваше приложение песочнице и фактически не может получить доступ к UserDefaults значения, принадлежащие к другим приложениям.

Из документов для NSUserDefaults:

изолированного приложение не может получить доступ или изменить настройки для любого другого приложения. (Например, если добавить домен другого приложения с помощью addSuiteNamed: метод, вы не получите доступ к предпочтений этого приложения.)

Попытка доступа или изменения настроек другого приложения в не результат с ошибкой, но когда вы это делаете, macOS фактически читает и записывает файлы , расположенные в контейнере вашего приложения, а не файлы для другого приложения.

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

5

по умолчанию пользователя вашего приложения используются только в приложении. Однако ваше приложение может включать множество пользовательских настроек по умолчанию. Это может включать в себя ваш собственный код, код третьих сторон и рамки Apple.

Чтобы избежать возможности столкновения с ключевым именем, все сторонние коды должны обязательно использовать полностью квалифицированные имена ключей. Я считаю, что любые клавиши, добавленные Apple, уже делают это.

Как разработчик приложения, я, по крайней мере, префикс моих ключей с именем моего приложения, чтобы быть в безопасности. Полностью квалифицированное имя прекрасно, но, вероятно, не нужно.

Я бы использовал «MyApp.foo».

+0

Хорошо, сторонние библиотеки объясняют, почему я вижу так много других значений, когда я ввел это в отладчик: 'p UserDefaults.standard.dictionaryRepresentation()'. –

 Смежные вопросы

  • Нет связанных вопросов^_^