2013-06-12 1 views
4

Je cherche à échanger le AFImageCache utilisé par défaut dans la catégorie UIImageView+AFNetworking pour quelque chose qui est basé sur le disque et qui peut gérer un peu plus précisément (quelque chose comme NSURLCache). Malheureusement, puisque UIImageView+AFNetworking est une catégorie et non une sous-classe, je ne peux pas remplacer af_sharedImageCache avec une sous-classe de UIImageView OU une autre catégorie.Cache Image Cache pour UIImageView dans AFNetworking

Existe-t-il un autre moyen d'obtenir cette fonctionnalité sans copier et coller la plupart des UIImageView+AFNetworking dans ma propre sous-classe?

Répondre

6

Le projet SDWebImage fournit une catégorie UIImageView similaire, mais offre la mise en cache en mémoire (en utilisant NSCache) et sur disque (en utilisant NSFileManager). Je vous recommande de l'utiliser lorsque vous avez besoin de mettre en cache sur le disque. L'inconvénient de cette implémentation est que vos requêtes réseau ne passeront pas par votre sous-classe AFHTTPClient. En fonction de vos besoins, vous devrez peut-être implémenter votre propre file d'attente d'opérations, authentification, etc. Si vous utilisez simplement Pour quelque chose de basique, comme afficher des images d'avatars dans une vue de table, ça devrait aller. Si cet inconvénient vous dérange, une autre solution serait d'utiliser SDImageCache (inclus dans le projet SDWebImage) pour mettre en cache les images et les télécharger vous-même en utilisant AFNetworking.

Enfin, notez que AFNetworking a un support intégré pour NSURLCache, et si vous en créez un, il mettra vos images en cache sur le disque. Toutefois, la mise en cache d'image est généralement utilisée pour afficher beaucoup d'images dans un UIScrollView et NSURLCache n'a pas suffisamment de performances pour un défilement régulier.

+0

Merci pour cela, je vais certainement regarder de plus près SDWebImage. Par curiosité, pourquoi NSURLCache a-t-il des performances sous-optimales? J'avais l'impression qu'il utilisait à la fois la mémoire et la mise en cache du disque comme un cache L1 et L2 où la requête web elle-même serait L3, ce qui serait en théorie très rapide. – jpredham

+1

Ceci est une bonne explication: https://github.com/rs/SDWebImage/wiki/How-is-SDWebImage-better-than-X%3F – jpredham

2

J'ai une fourche de AFNetworking qui inclut le cache de fichiers dans NSCachesDirectory. Vous pouvez le trouver ici: https://github.com/andyast/AFNetworking_FileCache Il existe une branche compatible avec la version 1.3.3 si vous en avez également besoin.

+0

Cool, fonctionne, serait mieux si AfNetworking fonctionne de cette façon !!! Est-il difficile de modifier directement le dernier AfNetworking? – Renetik

Questions connexes