Сохранение данных, чтобы они были постоянными в Objective-C - PullRequest
0 голосов
/ 07 июня 2018

Во многих различных проектах кодирования iOS в Objective-C я часто сталкивался с проблемой доступности данных после того, как я их получил изначально.

Например, в настоящее время я читаю из API-интерфейса stackoverflow.Я делаю это с сеансом и получаю словарь обратно (мой ответ JSON).

Но за пределами сеанса словарь недоступен!Я не могу скопировать содержимое в другой словарь, который я определил глобально, или что-то еще.Как будто он исчезает за пределами сеанса.

Поэтому мне интересно, как лучше всего сохранить эти данные, которые я хочу использовать?Из того, что я читал, похоже на NSUserDefaults или, может быть, на создание файла plist, хотя по общему признанию у меня были проблемы с обоими вариантами.Если есть метод, который лучше всего подходит для этого, я могу сосредоточиться на этом.

Спасибо!

1 Ответ

0 голосов
/ 07 июня 2018

Это зависит от того, насколько постоянным вы хотите быть.

Если вы сохраните этот словарь в глобальной переменной, он будет сохранен в той части оперативной памяти устройства, которая зарезервирована для работающего приложения.Когда приложение перестает работать (убивается операционной системой или удаляется пользователем) или если ваше устройство перезагружается - эта память теряется.

Если вы сохраните этот словарь на флеш-накопителе устройства (и в его файловой системе)- он будет жить после перезапусков / перезагрузок.

Обычно люди объединяют подходы: когда вы получаете данные из сети, вы сохраняете их в глобальной переменной и сохраняете в файловой системе.После перезапуска приложения вы пытаетесь загрузить данные из файловой системы.Причина, по которой ФС не используется постоянно, заключается в том, что он намного медленнее, чем доступ к ОЗУ.Я предполагаю, что я описываю кэширование .

Обратите внимание, что вы можете реализовать ручное кэширование (используя простые данные или текстовые файлы, NSUserDefaults, Core Data или другие библиотеки), но также вы можетеиспользовать встроенный HTTP-кеш - NSURLCache.Если вы создаете сеанс с NSURLSession.sharedSession, он будет использовать значение по умолчанию NSURLCache и соблюдать политику кэширования, продиктованную серверной стороной.

Для большего контроля и полной автономной поддержки, я бы порекомендовал реализовать кэширование вручную.См. Это о чтении и записи списков и writeToFile: атомно: .

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