NSURLConnection на iOS не пытается кэшировать объекты размером более 50 КБ

Несмотря на то, что в документации 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.

9
задан Ben Hoyt 24 August 2011 в 18:19
поделиться