Доступ к NSUserDefaults часто - PullRequest
12 голосов
/ 24 мая 2011

Во время логического процесса в моем приложении мне нужно часто получать доступ к пользовательским настройкам и кучу раз 10 ~ 15, чтобы определить, что и как нужно обрабатывать. Пусть этот вопрос не о производительности, а о том, как сделать это правильно.

В настоящее время я делаю [[NSUserDefaults standardUserDefaults] valueForKey:...] каждый раз, когда мне нужно запросить значение. Это правильно? Я думаю, что «сохранение» пользовательских значений по умолчанию в виде ивара может уменьшить дополнительную работу, но тогда мне интересно, не будет ли у этого проблем с синхронизацией, например, если пользователь изменит настройки, и они будут обновлены только после перезапуска приложения объект по умолчанию пользователя воссоздан).

Есть ли лучший способ?

Ответы [ 3 ]

26 голосов
/ 24 мая 2011

Не беспокойтесь об этом, это очень быстро, и я не верю, что есть лучший способ, это способ использования класса.

Класс NSUserDefaults кэширует значения внутри, поэтому поиск выполняется очень быстро.Затраты на [NSUserDefaults standardUserDefaults] против переменной экземпляра настолько малы, что вы даже не заметите этого, если сделаете это 5 миллионов раз в своем коде.

Единственный правильный способ оптимизировать это - улучшить логику, кэшируя значения, которые вы используете сами, с помощью указателя, а не словаря, которым в основном является NSUserDefaults и т. Д.

4 голосов
/ 24 мая 2011

У вас не возникнет никаких проблем, если вы сохраните объект по умолчанию в ivar. Обратите внимание, что это одиночка, и его указатель не изменится.

2 голосов
/ 25 мая 2011

Изменяются ли значения в пользовательских значениях по умолчанию во время этого логического процесса?

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

Затем вы можете использовать эти переменные столько раз, сколько захотите, не нажимая на пользовательские значения по умолчанию, считывая данные каждый раз.

Однако, если эти значения изменяются во время вашего логического процесса, доступ к ним по умолчанию, вероятно, является единственным способом.

С точки зрения производительности, доступ к нему 10-15 раз не будет иметь никаких негативных последствий. Если вы обращались к нему 10-15 раз в секунду в течение длительного периода времени, у вас могут возникнуть некоторые проблемы с отзывчивостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...