NSURLCache
кэширование на диске работало с iOS 5. По умолчанию NSURLCache
не использует кэширование на диске, вы должны включить его самостоятельно:
NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:(1024512) diskCapacity:(1024*1024*1024 * 100) diskPath@"Cache.db"];
[NSURLCache setSharedURLCache:cache];
Это установит глобальный URLкеш для использования в системе загрузки URL.По большей части это будет «просто работать».Если в вашем запросе используется значение NSURLRequestUseProtocolCachePolicy
(по умолчанию), система загрузки URL-адресов будет кэшироваться с указанием времени жизни, указанного в ответе удаленного сервера.Такие службы, как REDbot , могут сообщить вам, каким будет время жизни кэша данного ответа.
NSURLSessionConfiguration
можно настроить на использование отдельных кэшей, однако на практике это не работает, как описано,Начиная с iOS 8, если настроено несколько NSURLCache
, будет использоваться только первый.
При использовании на дисковом хранилище с NSURLCache
существуют дополнительные недокументированные действия: - Если для diskCapacity
установлено значение менее 5 МБ, он не будет использоваться.- Очистка и изменение размера кэша часто не работает должным образом.Некоторые из них были исправлены в iOS 8, некоторые - нет.- currentDiskUsage
информация часто неверна.- В некоторых выпусках iOS NSURLCache
игнорирует ограничение, установленное diskCapacity
, и увеличивает кэш на диске без ограничений.
Тем не менее, NSURLCache
при кэшировании на диске обычно делает правильные вещи.Если вы создадите кэш на диске, как указано выше, при запуске приложения кэш сохранит ответы на диск, и система загрузки URL будет использовать эти кэшированные ответы.После того, как вы установили кеш, как описано выше, вам не нужно напрямую взаимодействовать с кешем - система загрузки URL сделает это за вас.Исключение составляет NSURLSession
, где кэширование все еще немного нарушено.