2013-06-12 3 views
4

Я ищу обменивать на AFImageCache используемый по умолчанию в UIImageView+AFNetworking категории для чего-то, что это основано на диске, и это может выдавил немного более точно (что-то вроде NSURLCache). К сожалению, поскольку UIImageView+AFNetworking является категорией, а не подклассом, я не могу просто переопределить af_sharedImageCache с подслоем UIImageView ИЛИ другой категорией.Disk Image Cache Backed для UIImageView в AFNetworking

Есть ли другой способ достичь этой функциональности без копирования и вставки большей части UIImageView+AFNetworking в мой собственный подкласс?

ответ

6

Проект SDWebImage обеспечивает аналогичную категорию UIImageView, но предлагает как кэширование как в памяти (с использованием NSCache), так и на диске (используя NSFileManager). Я бы рекомендовал использовать это, когда вам нужно кэшировать на диск.

Недостатком этой реализации является то, что ваши сетевые запросы не будут проходить через ваш подкласс AFHTTPClient, поэтому в зависимости от ваших потребностей вам может понадобиться реализовать свою собственную очередь операций, аутентификацию и т. Д. Если вы просто используете это для чего-то основного, например, для отображения изображений аватаров в виде таблицы, должно быть хорошо.

Если этот недостаток беспокоит вас, альтернативная идея заключалась бы в использовании SDImageCache (включенного в проект SDWebImage) для кэширования изображений и загрузки их самостоятельно с использованием AFNetworking.

Наконец, обратите внимание, что AFNetworking имеет встроенную поддержку для NSURLCache, а если вы ее создадите, она будет кэшировать ваши изображения на диск. Однако кэширование изображений обычно используется для отображения большого количества изображений в UIScrollView, а NSURLCache не имеет достаточной производительности для плавной прокрутки.

+0

Спасибо за это, я обязательно поближе рассмотрю SDWebImage. Из любопытства, почему NSURLCache имеет субоптимальную производительность? Я был под впечатлением, что он использовал как кеширование памяти, так и кеширование типа L1 и L2, где сам веб-запрос был бы L3, что теоретически было бы довольно быстрым. – jpredham

+1

Это хорошее объяснение: https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F – jpredham

2

У меня есть вилка AFNetworking, которая включает кеш файлов в NSCachesDirectory.

Вы можете найти его здесь: https://github.com/andyast/AFNetworking_FileCache Существует ветка, совместимая с V1.3.3, если вам это нужно.

+0

Прохладный, работает, было бы лучше, если AfNetworking работает таким образом !!! Трудно ли изменить непосредственно последнее AfNetworking? – Renetik

 Смежные вопросы

  • Нет связанных вопросов^_^