Несмотря на документацию Apple , в которой указано иное , NSURLCache
на iOS вообще не выполняет никакого кэширования диска (флэш). Вы можете создать подкласс NSURLCache
, чтобы изменить поведение операций выборки и сохранения для использования диска (как это делает SDURLCache
), но из-за следующих серьезных ограничений того, как кэш используется и реализован, это не работает так, как вы ожидаете:
NSURLConnection
даже не вызывает storeCachedResponse:forRequest:
для файлов размером более 50 КБ (> = 52428 байт, если быть точным). Это делает подкласс NSURLCache
бессмысленным для нашего использования (изображения размером 200 КБ), потому что он даже не попадет в кеш. В результате мы должны добавить кеширование вручную на уровне выше NSURLConnection
.
- Даже когда кто-то вызывает встроенный NSURLCache
storeCachedResponse:forRequest:
вручную, он сохраняет ответ в памяти, только если он меньше 180 КБ. Я проверил это, вызвав storeCachedResponse вручную и убедившись, что значение до / после currentMemoryUsage
не изменилось при длине данных более 180 КБ. Таким образом, мы также должны написать собственное кэширование памяти LRU.
Кто-нибудь еще заметил эти проблемы? Или мне чего-то не хватает?
К вашему сведению, я использую iOS 4.3 в симуляторе и на iPad 2.