2013-04-09 1 views
3

Я использую NSURLCache по умолчанию для кэширования изображений в приложении для iPhone. Что произойдет, если кеш будет заполнен, и я попытаюсь кэшировать другое изображение?Что произойдет, если NSURLCache заполнен?

Не будет ли оно кешировать изображение? или он будет заменен самым старым изображением, кэшированным?

Большое спасибо

+0

Это поведение не описано в документации, однако я ожидаю, что от Apple будет что-то лучше, чем FIFO, например. кешированный вес ответов может быть увеличен на основе счетчика обращений к кешу. И поведение, скорее всего, отличается для уровней памяти/диска. –

+0

Если система увеличивает выделенную кэш-память сама по себе, чем цель объявления размера кэша при создании? Я действительно считаю, что это своего рода FIFO, но я не уверен, и мои тесты кажутся неточными. я не уверен, чего ожидать, если мой кеш составляет 50 МБ, и он заполняется. – Patz

+0

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

ответ

2

Максимальный кэш можно влиять на инициализацию initWithMemoryCapacity: ... diskCapacity: ... diskPath: ..] Новый файл всегда будет загружен. (за исключением случаев, когда он больше максимальной емкости памяти, тогда он будет просто загружен и не сохранен в кеше) Если достигнут максимальный размер кеша, другие файлы будут удалены. Не указано, какие файлы будут удалены. Нетрудно создать собственный NSUrlCache и обработать его самостоятельно. , если вы хотите увидеть пример, как это сделать, посмотрите на https://github.com/evermeer/EVURLCache