web-dev-qa-db-fra.com

iOS - Mise en cache et chargement des images de manière asynchrone

Je veux une bibliothèque de chargement et de mise en cache des images pour iOS qui

  • charge les images de manière asynchrone,
  • met en cache les images, avec une taille de cache configurable et un comportement LRU,
  • vérifie si les images ont été mises à jour à l'aide de HTTP HEAD,
  • ne cache rien en cas de code d'erreur ou d'image non valide.

J'ai regardé HJCache , mais cela ne satisfait que les deux premiers critères. Y a-t-il quelque chose de mieux?

43
nornagon

Je sais que ce fil a été répondu, mais j'ai essayé une bibliothèque qui a très bien fonctionné. J'utilisais ASIHttpRequest auparavant et la différence est grande.

https://github.com/rs/SDWebImage

De plus, si quelqu'un doit redimensionner ou recadrer les images distantes et disposer des mêmes fonctionnalités que SDWebImage, j'ai intégré la bibliothèque SDWebImage à la bibliothèque UIImage + Resize (de Trevor Harmon) et créé un exemple de projet. J'ai modifié le code de SDWebImage pour gérer les transformations (recadrage, redimensionnement).

Le projet est public sur https://github.com/toptierlabs/ImageCacheResize . Sentez-vous libre de l'utiliser!

29
Tony

EDIT: ASI est obsolète maintenant, mais la réponse de @ Tony contient un lien vers une bibliothèque qui semble faire presque tout cela (avertissement - je ne l'ai pas encore essayé et je me fie à la recommandation de @ Tony!)


ASIHTTPRequest fait tout cela :)

Tout ce que vous avez à faire est d’ajouter quelque chose comme le rappel de succès

UIImage *image = [UIImage imageWithData:[request responseData]];

// If the image is nil ASIHTTPRequest will let you remove the data from the cache
// but I can't remember off the top of my head how. Checkout the docs!

MODIFIER

Et quand vous avez fini, vous pouvez toujours le faire apparaître sur github pour le reste d'entre nous. . . 

25
deanWombourne

Récemment, j’ai jeté un œil sur le type de chose que vous décrivez, soit un cache de données général, soit un cache centré sur l’image, mais je n’ai trouvé aucun intérêt. Donc, vous devrez peut-être rouler vous-même pour obtenir toutes ces fonctionnalités. 

Il existe divers articles de blogues et articles détaillant ces éléments, tels que http://davidgolightly.blogspot.com/2009/02/asynchronous-image-caching-with-iphone.html

Je suppose que vous avez envisagé la bibliothèque Three20? Je ne pense pas que cela couvrirait vos besoins cependant.

1
occulus