#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 и затем повторный синтаксический анализ кажутся немного излишними.