Я уже спросил Когда именно удаляются вещи из памяти и диска urlcache?
Теперь у меня есть еще несколько дополнительных вопросов:
Кэш-память ограничена оперативной памятью iPhone (обычно 2 ГБ).Но постоянство диска ограничено 64 ГБ или 128 ГБ.Это правильно?
Имеет ли смысл иметь постоянство больше, чем объем памяти.Может ли это быть полезным, если вы не хотите иметь большой объем памяти (и не хотите, чтобы приложение было завершено из приостановленного состояния), то есть разрешить восстановление кэша из дискового хранилища и затем вернуть сохраненные результаты?
После контрольного нажатия на URLCache.shared
я вижу следующие комментарии:
- Объем памяти: 4 мегабайта (4
- Емкость диска: 20 мегабайт (20 *1024* 1024 байта) *1024*
- Путь к диску:
(user home directory)/Library/Caches/(application bundle id)
Пользователи, не имеющие специальных требований или ограничений кэшированиядолжен найти экземпляр общего кэша по умолчанию приемлемым.Если этот экземпляр общего кэша по умолчанию неприемлем, можно вызвать +setSharedURLCache:
, чтобы установить другой экземпляр NSURLCache
, возвращаемый этим методом.Вызывающие абоненты должны позаботиться о том, чтобы вызывающий установщик вызывался в то время, когда ни один другой вызывающий не имеет ссылки на ранее установленный общий кэш URL-адресов.Это сделано для того, чтобы предотвратить сохранение данных кэша неожиданно недоступными.
Так что я думаю, что мое обоснование правильное.
Как работает весь процесс чтения / записи/ восстановление работы кеша?
Я имею в виду, когда я делаю сетевой запрос в первый раз, получается ли, что весь ответ / ошибка / данные записываются / сохраняются в кеше и затем сохраняются?
В следующий раз, если я захочу read , он сначала запускается из кэша, затем, если ответ был not stale / expired, он вернет его.Ничего не изменится для дискового хранилища.
Если срок его действия истек, он отправляет новый запрос и только после получения успешного ответа удаляет ответ из памяти и диска и записывает новый ответ в кэш и диск.Если новый запрос не удался, он не будет очищен, скорее он просто сохранит устаревшие / просроченные данные, поэтому, если мы захотим (загрузить просроченный ответ), он загрузится оттуда?
Икогда приложение завершается, память стирается.Дисковое хранилище не повреждено, если на устройстве недостаточно памяти или вы не достигли предела размера.При следующем запуске приложения память перезагружает все содержимое дискового хранилища в кеш.
Это восстановление кеша начнет загрузку последних сохраненных данных, затем перейдет к более старым данным, пока не достигнет предела размера или не достигнет конца элементов, хранящихся на диске.Правильно?
Если в обычный день количество сетевых подключений, которые пользователь выполняет в течение типичного 1-часового сеанса, составляет около 30 МБ, тогда я должен установить размер кэша в 20 МБ и 30 МБ дискового пространства?Что делать, если у меня есть изображения?Я слышал, что изображения хранятся по-разному, так как изображение размером 1 МБ может занимать 10 МБ.Так как мне это сделать?
Я спрашиваю все это, потому что я хочу улучшить кеширование в приложении и улучшить общее понимание, чтобы не увеличивать использование памяти * приложением слишком сильно, чтобы оно победило 'он не может выйти из памяти из приостановленного состояния из-за высокого использования памяти моими приложениями или из-за необходимости других приложений.
*: некоторые из наших сетевых запросов будут загружать миниатюры, поэтому я должен быть внимателен при увеличении предельного размера кэширования.