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