опции для обработки и сохранения данных JSON в iOS - PullRequest
0 голосов
/ 28 января 2019

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

  • Получение NSData от http-клиента
  • Анализ JSON из NSData с использованием NSJSONSerialization, результатом является экземпляр NSDictionary
  • Отображение данных json в структуру, используемую локально, в результате получается набор объектов конфигурации, представляющих данные
  • Сохранение объектов конфигурации в экземпляре NSData с использованием NSKeyedArchiver (объекты конфигурации реализуют NSCoding).
  • Сохранение NSData в NSUserDefaults

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

Этот подход, кажется, работает нормально, пока данные конфигурациидовольно маленький.Однако недавно мы увидели фрагменты данных конфигурации, размер которых> 20 МБ в формате JSON.В этих случаях описанный выше подход не работает, так как для его обработки требуется слишком много памяти.На вкладке «Производительность xcode» объем памяти приложения увеличивается до 500 МБ, и процесс обычно завершается сбоем, по крайней мере, на старых устройствах (например, iPhone 6).

Прежде чем приступить к переработке всего процесса, мне интересно, есть лиявляется более оптимизированным, что позволило бы выполнять дамп и замену, но с меньшим объемом памяти.Существует ли более эффективный способ перехода от ответа HTTP к некоторому типу постоянного хранилища, если требуется сопоставление?Будут ли основные данные хорошо подходить для сброса и замены?Я думаю, что нет.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

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

0 голосов
/ 28 января 2019

Если память - ваша главная проблема, вы можете взглянуть на https://github.com/stig/json-framework,, который позволяет вам анализировать «по частям», поэтому вам не нужно иметь весь документ JSON в памяти в любое время.

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