Подтвердить что ты не робот

Почему NSUserDefaults используется в iOS?

Я новичок в разработке iOS и разработке мобильных приложений в целом, у меня есть приличные знания о шаблонах Objective C и MVC для использования, и я никогда не делал разработку Mac.

Я пытаюсь понять, для чего NSUserDefaults?

У нас уже есть что-то вроде PList, который хранит данные как XML, и у нас есть SQLite, который является легким DB для таких устройств.

Тогда почему мы это имеем?

Является ли это альтернативным простым хранилищем ключевого значения для нашего приложения так же, как у нас есть разные типы хранилищ в облаке, например RDBMS и хранилище NoSQL на основе ключа?

Для NSUserDefaults, документы Apple говорят, что: -

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

Что они означают по базе данных по умолчанию пользователя?

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

Как и в Mac OS X, у iOS также есть несколько пользователей, и в зависимости от того, что зарегистрировано в NSUserDefaults, он выбирает свои предпочтения?

Скажите, пожалуйста, если я ошибаюсь.

4b9b3361

Ответ 1

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

NSUserDefaults делает невероятно легким, так как вам не нужно беспокоиться о файлах, сущностях, выборках,.... Все это делается в одной строке.

Ответ 2

Одна вещь, о которой еще не упоминалось: NSUserDefaults поддерживает все базовые скалярные (float, int, BOOL) типы, а также совместимые с plist типы: NSData, NSString, NSNumber, NSDate, NSArray и NSDictionary. (Вы упомянули plists как альтернативу - NSUserDefaults - это всего лишь интерфейс для стандартного файла plist в папке Preferences приложения.) Это упрощает создание постоянного хранилища для вашего состояния приложения всего за несколько строк кода. Еще лучше, если вы реализуете NSCoding на своих объектах модели, вы можете архивировать их в NSData и помещать их в NSUserDefaults:

NSData* data = [NSKeyedArchiver archivedDataWithRootObject:arrayOfModelObjects];

[[NSUserDefaults standardUserDefaults] setObject:data forKey:kDefaultsKeyModelObjects];

и восстановление данных вашего приложения так же просто, как

- (void)viewDidLoad
{
    NSData* data = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultsKeyModelObjects];

    arrayOfModelObjects = [[NSKeyedUnarchiver unarchiveRootObject:data] retain];

    // error checking, tell UI to load the new values, etc...
}

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

Если вы использовали, например, SQLite для хранения ваших данных приложения, вам нужно написать много кода для перемещения данных модели в базу данных и из нее. Это имеет смысл, если вы имеете дело с большим количеством данных, нуждаетесь в эффективном поиске и т.д.; но если это, скажем, список серверов в сетевом приложении, проще и чище бросать их в NSUserDefaults.

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

Так как Mac OS X, iOS также имеет несколько пользователей и в зависимости от в зависимости от того, что зарегистрировано в NSUserDefaults, выбирает его/ее предпочтения?

Нет, на iOS плита по умолчанию находится в папке Library/Preferences приложения, а не в пользовательской папке, такой как на OS X. Я не могу себе представить, что iOS будет иметь несколько логинов, но вы никогда не знаете. Если бы это было так, им пришлось бы создавать отдельные плиты по умолчанию для разных пользователей.

Ответ 3

Первоначально он хранит настройки, но, похоже, используется (ab) для многих других вещей, если вопросы о SO - что-то в этом роде. "Точкой" этого является то, что он обеспечивает однострочный метод сохранения и извлечения данных для широкого диапазона типов данных.

Нет многопользовательской конфигурации (пока?) на iOS (вам когда-либо приходилось входить в свой iPhone?), который встроен в NSUserDefaults, но поскольку OS X и iOS построены на том же основании, тот же класс используется для обеих операционных систем.

Ответ 4

iOS - это однопользовательская ОС. Следовательно, NSUserDefaults используется по-разному в OSX и iOS.

В iOS вы обычно используете NSUserDefaults для сохранения настроек приложения и/или пользовательских данных в системе "iOS по умолчанию". Данные, сохраненные в системе по умолчанию, будут постоянно сохраняться даже при перезагрузке устройства iOS. На самом деле, даже когда пользователь обновляет приложение.

Обычно вы хотите использовать NSUserDefaults для сохранения настроек/настроек приложения. Любые другие массивные данные, такие как данные игры или вычисления в реальном времени, должны быть сохранены в CoreData или sqllite в каталоге документов.

Ответ 5

NSUserDefaults сохраненные значения только для вашего приложения.

Примечание. Он не предназначен для замены традиционного хранилища данных (основные данные, SQLite, списки свойств и т.д. предназначены для хранения данных приложения). Для NSUserDefaults предназначен для определенных пар значений ключа.

Например, я использую его для хранения аутентифицированного сетевого пользователя и полного имени после завершения процесса входа в систему. После таймаута сеанса или выхода из системы я очищаю эти значения. Для этого NSUserDefaults светит.