NSURLCache
кэширование на диске работает с iOS 5. По умолчанию NSURLCache
не использует кеширование на диске, вы должны включить его самостоятельно:
NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:(1024*1024*512) 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
, где кеширование все еще кажется немного нарушенным.
person
quellish
schedule
16.11.2014