Кэш изображений на диске для UIImageView в AFNetworking

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

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


person jpredham    schedule 12.06.2013    source источник


Ответы (2)


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

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

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

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

person Aaron Brager    schedule 13.06.2013
comment
Спасибо за это, я обязательно присмотрюсь к SDWebImage. Из любопытства, почему NSURLCache имеет неоптимальную производительность? У меня сложилось впечатление, что он использует кэширование как памяти, так и диска, вроде кеша L1 и L2, где сам веб-запрос будет L3, что теоретически будет довольно быстрым. - person jpredham; 14.06.2013
comment
Это хорошее объяснение: github.com/ rs/SDWebImage/wiki/ - person jpredham; 14.06.2013

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

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

person Andy Steinmann    schedule 17.10.2013
comment
Круто, работает, лучше бы AfNetworking так работал!!! Трудно ли напрямую модифицировать последнюю версию AfNetworking? - person Renetik; 30.10.2014