для некоторых последующих Вы могли бы взглянуть.

let memoryCapacity = 200 * 1024 * 1024
let diskCapacity = 1 * 1024 * 1024
let cache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myDataPath")
URLCache.shared = cache

rio1

Я устанавливаю память urlcache на 200 МБ, а пространство на диске - 1 МБ. Затем я загружаю изображение. Выключите интернет и принудительно выйдите из приложения, снова запустите приложение, коснувшись его, и инициируйте вызов (для загрузки изображения), но он сразу же падает, потому чтоdata являетсяnil

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

Scenario2

Если я установлю diskCapacity на 200 МБ (let diskCapacity = 200 * 1024 * 1024) затем, несмотря на то, что кэш очищен из памяти, изображение сохраняется на диске; это всегда покажет!

Основываясь на этом наблюдении, у меня есть следующие вопросы:

Правильно ли говорить, что каждый раз, когда вы принудительно завершаете работу или происходит сбой приложения из-за предупреждения / проблемы с памятью, ваш кэш будет очищен, хотя он и оставит ваш диск нетронутым?Любая другая причина, где кэш может быть очищен от памяти?Когда могут быть удалены вещи, хранящиеся на диске?

Ответы на вопрос(1)

Решение Вопроса

Кэш памяти теряется, когда приложение закрывается (или, вероятно, под давлением памяти). Дисковый кеш сохраняется при нескольких вызовах приложения, но может быть удален, если на устройстве не хватает постоянного хранилища, а ОС освобождает место из кешей и временных папок.

Длинный ответ:

Ты спрашиваешь:

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

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

Любое другое место, где кэш может быть очищен от памяти?

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

Если вы вручную удалите ответы изURLCache.Старые отдельные элементы удаляются из кэша, когда вы приближаетесь к максимальной емкости кэша и пытаетесь добавить новые элементы, вытесняя более старые элементы.Сетевые ответы часто включают в себя политику кэширования (указывающую, как долго можно безопасно кэшировать ответ), поэтому, вероятно, они будут удалены в этот момент.Кэш памяти может быть разумно очищен от давления памяти (например,.UIApplicationDidReceiveMemoryWarning).

Когда могут быть удалены вещи, хранящиеся на диске?

Логика в значительной степени такая же, как и в предыдущем пункте, за исключением того, что (а) она может сохраняться при вызовах приложения); и (b) он не сбрасывается при нагрузке на память, хотя может быть удален, когда устройству не хватает постоянной памяти.

 Rob08 сент. 2017 г., 21:00
Не то, что я знаю из.
 Honey08 сент. 2017 г., 20:39
Огромное спасибо. Нет ли обратного вызова для «когда устройству не хватает постоянного хранилища»?
 Rob04 окт. 2018 г., 17:08
Нет, «дисковый» кэш (или, точнее, постоянное хранилище) сохраняется на всех концах приложения. Теперь некоторые распространенные сторонние библиотеки кеширования изображений очищают постоянный кеш, но это детали реализации в этих библиотеках. Но постоянное хранилище само по себе является «постоянным».
 Honey04 окт. 2018 г., 19:00
Виноват. Я запутался в слове «кеш». Имеет смысл. кеш диска == постоянное хранилище! = кеш памяти. Я открыл новый вопросВот для некоторых последующих Вы могли бы взглянуть.
 Honey04 окт. 2018 г., 16:59
Дисковый кеш сохраняется при нескольких вызовах приложения Вы имеете в виду, что если приложение переводится в приостановленное состояние, а затем пользователь нажимает на значок приложения, они все равно будут использовать кеш. Однако, если приложение было закрыто, то кэш-память все исчезает - независимо от причины (пользовательское завершение, сбой приложения, предупреждение о памяти, которое привело к сбою приложения или удаляется из памяти, когда оно было приостановлено)

Ваш ответ на вопрос