Выбор ответа Middle Кеширование обновлено

Кеш в памяти и нехватка памяти

Вопрос

Почему кеш картинок в памяти на iOS часто делают на NSCache, а не на Dictionary?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: NSCache сам вытесняет объекты при нехватке памяти и знает лимит стоимости, а словарь только растёт. NSCache потокобезопасен, автоматически освобождает объекты при давлении памяти и умеет ограничения countLimit и totalCostLimit (например, в байтах).

Варианты ответа

  1. NSCache сам вытесняет объекты при нехватке памяти и знает лимит стоимости, а словарь только растётправильный ответ
  2. Dictionary нельзя использовать с картинками: UIImage не реализует Hashable для ключей
  3. NSCache прозрачно сбрасывает объекты на диск при нехватке памяти и поднимает их обратно при обращении
  4. NSCache хранит объекты вне кучи приложения, поэтому они не учитываются в лимите памяти iOS

Разбор

NSCache потокобезопасен, автоматически освобождает объекты при давлении памяти и умеет ограничения countLimit и totalCostLimit (например, в байтах). Словарь ничего не вытесняет. На Android аналог LruCache с размером в байтах (sizeOf). На диск NSCache ничего не пишет, объекты лежат в обычной памяти приложения и учитываются в её лимите. Картинки в словаре хранить можно: ключом служит URL, а не сам UIImage.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме