2013-11-11 3 views
5

Это может быть ожидаемое поведение, но Apple явно не указано.NSCache всегда выдает данные изображения, когда приложение входит в фон.

Я использую NSCache для кеширования некоторых изображений для своих UICollectionView. Когда я помещаю приложение в фоновом режиме и открываю его снова (сразу), все мои изображения больше не находятся в NSCache.

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

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

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

ответ

3

Яблочный Docs говорит:

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

Поэтому он удаляет некоторые предметы, а не все предметы. Это зависит от внутренних политик NSCache, доступной памяти, состояния устройства и т. Д. Также читайте бит в протоколе NSDiscardableContent.

Из документов:

По умолчанию объекты NSDiscardableContent в кэше автоматически удаляются из кэша, если их содержимое отбрасывается, хотя это автоматическая политика удаления может быть изменена. Если объект NSDiscardableContent помещается в кеш, кеш вызывает при его удалении discardContentIfPossible.

+0

Я протестировал его таким образом, что я поставил несколько изображений в кеш, положил приложение в фоновом режиме и вернул его на передний план, и эти изображения, похоже, были выселены. Я кэширую изображения после получения их из набора setImageWithURLRequest от AFNetworking. Интересно, имеет ли это какое-либо отношение к этому? Может быть, что-то еще выпускает изображения, когда приложение переходит в фоновый режим? – chrysb

+0

Я согласен, и это то, что упоминается в документах. Возможно, вы захотите использовать некоторые переменные сеанса (например, singleton class) и вместо них установить их. – Abhinav

+0

Спасибо - я постараюсь больше и отчитаюсь. – chrysb

2

Похоже, вам необходимо реализовать протокол NSDiscardableContent для объектов, которые вы помещаете в NSCache. Когда объекты в кеше не соответствуют NSDiscardableContent, они высылаются в соответствии с описанием приложения в соответствии с этим ответом. https://stackoverflow.com/a/13579963

Смежные вопросы