Что произойдет, если NSURLCache заполнен?

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

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

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


person Patz    schedule 09.04.2013    source источник
comment
Его поведение не описано в документации, однако я ожидаю, что у Apple будет что-то лучше, чем FIFO, например. вес кешированных ответов может быть увеличен на основе счетчика попаданий в кеш. И поведение, скорее всего, отличается для слоев памяти/диска.   -  person A-Live    schedule 09.04.2013
comment
Если система сама увеличивает выделенную кэш-память, то с какой целью объявлять размер кэша при создании? Я действительно считаю, что это своего рода FIFO, но я не уверен, и мое тестирование кажется неточным. я не уверен, чего ожидать, если мой кеш будет 50 МБ, и он будет заполнен   -  person Patz    schedule 09.04.2013
comment
Проще говоря, никакой вид кеша не должен обеспечивать какую-либо целостность данных, иначе это база данных, а не кеш, и вам нужно обращаться с ней по-другому.   -  person A-Live    schedule 09.04.2013


Ответы (1)


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

person Edwin Vermeer    schedule 09.04.2013