Кэширование данных Objective C на iOS

#objective-c #cocoa-touch #ios

#objective-c #cocoa-touch #iOS

Вопрос:

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

Как я могу это сделать?

Ответ №1:

Вы обратили внимание на NSCache?

NSCache Объект — это изменяемая коллекция, в которой хранятся пары ключ-значение, аналогичные NSDictionary объекту. NSCache Класс предоставляет программный интерфейс для добавления и удаления объектов и настройки политик удаления на основе общей стоимости и количества объектов в кэше…

Комментарии:

1. Однако это новинка для 10.6 и iOS 4.0, поэтому не обязательно доступно (по крайней мере, на данный момент Apple по-прежнему будет принимать заявки с целями развертывания ниже 3.1). Несмотря на то, что оно основано на доле рынка и отсутствует, как NSCache, я не думаю, что разработка нового приложения для 3.1 действительно разумное решение.

2. Насколько я понимаю вопрос, в данном случае желателен постоянный кэш . NSCache Это кэш в памяти, в основном NSDictionary , который может удалять кэшированные данные в условиях нехватки памяти.

Ответ №2:

Лично мне очень нравятся классы EGOCache, я довольно часто использую их в своих проектах:

https://github.com/enormego/EGOCache

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

Ответ №3:

Существует множество различных решений этой проблемы, и нет «правильного» способа сделать это. Несколько популярных опций:

  • Core Data — платформа Apple для обеспечения сохраняемости. Очень производительный, но более сложный.
  • SQLite — быстрый и гибкий, но на пустом месте.
  • Списки — В основном, при записи файла на диск вам приходится читать и записывать вручную.
  • NSUserDefaults — самый легкий вариант «ключ-значение».

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

Комментарии:

1. Я бы также хотел добавить Realm в ваш список.

Ответ №4:

Я голосую за Core Data

Ответ №5:

Какой тип данных? Если бы SQLLite основывался на тексте / строке, вероятно, был бы лучшим.

Ответ №6:

Я бы сохранил вычисленные / проанализированные данные либо в хранилище Core Data, либо в плоских файлах NSData в каталоге Documents вашего приложения. Вы правы в том, что сохранение этого в NSUserDefaults и затем повторный синтаксический анализ кажутся немного излишними.