#iphone #objective-c #ios #core-data
#iPhone #objective-c #iOS #core-данные
Вопрос:
У меня есть идея создать пользовательское постоянное хранилище, которое в основном работало бы как кэш. Т.Е. Объекты, доступные из локального хранилища SQLite, будут извлекаться из него, а те, которые недоступны, будут извлекаться из сети, а затем помещаться в SQLite.
Проблема в том, как подключить это к механизму Core Data, чтобы не требовалось никаких изменений в логике приложения. Хранилище кэширования должно вести себя как надлежащее постоянное хранилище. На данный момент моя идея состоит в том, чтобы расширить постоянное хранилище SQLite.
Итак, вопрос в том, с чего мне начать? 🙂 Это разумная идея или мое понимание Core Data совершенно неверно, и подобные вещи не должны выполняться в респектабельном приложении? Кто-нибудь делал что-нибудь подобное раньше?
Ответ №1:
Локальное кэширование, безусловно, полезно на устройствах, к которым вы не подключены последовательно. Приложения также гораздо более отзывчивы, работая с локальными хранилищами.
Одним из вариантов, помимо собственного кодирования, является restkit (restkit.org ).
С их страницы:
Поддержка основных данных. RestKit, построенный поверх уровня сопоставления объектов, обеспечивает интеграцию с базовой платформой данных Apple. Эта поддержка позволяет RestKit сохранять удаленно загруженные объекты непосредственно обратно в локальное хранилище, либо в виде быстрого локального кэша, либо в качестве основного хранилища данных, которое периодически синхронизируется с облаком. RestKit может заполнять для вас основные ассоциации данных, обеспечивая естественный обход вашей модели данных на основе свойств. Он также предоставляет хороший API поверх основных примитивов данных, который упрощает настройку и запросы вариантов использования.
Комментарии:
1. Спасибо bryanmac. Я не знал о RestKit. Похоже, это точное решение моей проблемы 🙂
Ответ №2:
Помните, что CoreData обладает значительной производительностью и уже встроенными механизмами кэширования. При взаимодействии с контроллерами полученных результатов CoreData выдает ошибки и автоматически заполняет объекты, выполняет скрытое кэширование, а также возвращает объекты в пакетах, размер которых можно указать.
Если у вас очень специфический сценарий, возможно, вы могли бы повысить производительность, перенаправив ваши чтения через самописный кэш. Но для большинства целей простое использование CoreData в том виде, в каком оно предназначено для автоматического использования, дает вам преимущество некоторых довольно сложных вещей.
Комментарии:
1. Механизмы кэширования CoreData предназначены для кэширования локальных данных — я думаю, он ссылается на кэширование удаленных сетевых ресурсов с помощью локального хранилища данных в core data …
2. Безусловно, и использование RestKit обеспечит все эти преимущества благодаря использованию CoreData. Мое предложение действительно имело целью, скажем, у меня есть некоторые данные, которые я извлек из Интернета (RestKit не выдерживает), и я просто хочу их кэшировать. Создайте себе небольшую модель в Xcode, и в десяти строках кода вы сможете сохранять в ней объекты, используя только CoreData — не нужно углубляться в SQLite.
3. Если вам нужно что-то более быстрое, чем CoreData, ознакомьтесь с BNRPersistence framework, он построен на Tokyo Cabinet и, по-видимому, довольно быстр.