2017-02-01 7 views
0

Я создаю приложение и хочу использовать NSCache для хранения данных для кеширования.Как пользователь NSCache подходит в приложении iOS?

Будет около 5 API, для которых мне нужно кэшировать данные. Должен ли я пользователь NSCache? Я занимался исследованиями в NSCache, но у меня есть некоторые сомнения относительно этого.

Я прошел через ссылку ниже.

https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/CachingandPurgeableMemory.html

Я нашел некоторые интересные вещи там.

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

Если мы установим предел в 10, и если мы попытаемся добавить 11-й элемент, то какой конкретный элемент он отбросит, это 1-й или 10-й? Или это может быть случайный предмет.

Если я хочу сохранить 5 различных объектов NSCache для всех API, то как я могу это сделать? Я должен сделать 5 различных NSCache объектов, или я должен хранить 5 разных словарей в одном объекте NSCache?

Пожалуйста, дайте мне знать лучший способ справиться с этим.

+0

Что вы хотите хранить в кэше? Пока они являются одноразовыми объектами, для которых вам удобна перезагрузка из сети там, где это необходимо, возможно, что «NSCache» отлично работает для вашей конкретной ситуации. –

+0

Я собираюсь сделать заявку на знакомства. Для чего мне нужно хранить профили. Должен ли я использовать NSCache в этом случае? –

+0

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

ответ

0

NSCache работает в основном как NSMutableDictionary, основное отличие состоит в том, что даже если он является изменяемым, он является потокобезопасным (обычно изменяемые объекты NSFoundation не являются потокобезопасными). Таким образом, вы получаете и устанавливаете объекты с помощью ключей.
Да, документация не ясна, но я помню (и имеет смысл), что вы должны всегда определять, является ли объект кешем, и если он не перезагружает его из вашего основного источника или не управляет этим конкретным случаем. Поэтому не очень важно, какой из них удален, просто убедитесь, что в какой-то момент объект больше не может быть, и вы управляете этой ситуацией.
Обычно я создаю разные кеши, основанные на разных контекстах, но в большинстве случаев их хватит.
У меня есть несколько советов:

  • Ваш ответ помечается как Swift, при этом обратите внимание, что NSCache (в быстром 2, не знаю, в 3) работает только с объектами, а не структура или перечислений (типов значение, если тай может быть перекрыт).
  • Помните, что протокол HTTP имеет свою собственную систему кэширования и коммуникации, не изобретайте колесо
+0

Пожалуйста, расскажите, как кешировать объект json для автономного хранения в swift 3 –