Différents types de cache SDWebImage
-
21-12-2019 - |
Question
J'utilise SDWebImage depuis un certain temps pour mettre en cache toutes mes images, mais maintenant je souhaite disposer de plusieurs caches pour regrouper différents types d'images.Par exemple, trois types de caches avec plusieurs images chacun, donc au moment de l'exécution, je souhaite en effacer un ou en avoir différents setMaxCacheAge
Exemple:types d'images = les images de voitures sont un type, les motos en sont un autre...avions autres..comme ça.Après avoir stocké ces images, je souhaite supprimer ou vider le cache uniquement des images de moto (un type)
Maintenant, j'ai ceci mais c'est pour chaque image mise en cache :
SDImageCache * sDImageCache = [SDImageCache sharedImageCache];
[sDImageCache setMaxCacheAge:60*60*24];
...
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
[imageCache cleanDisk];
-
J'ai vu ça mais est-ce vraiment ce que je veux ?
SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
Utilisation indépendante de la mise en cache d'images asynchrones
La solution
Ok, j'ai trouvé comment faire... et je partagerai
J'ai d'abord supprimé toutes les preuves de [SDWebImageManager sharedManager]
, parce que je veux tout faire manuellement.
Alors [SDWebImageDownloader sharedDownloader]
pour en demander un nouveau et queryDiskCacheForKey (SDImageCache)
pour obtenir une image locale (disque ou mémoire)
Comment:
Créer une nouvelle imageCache avec un espace de noms spécifique
self.imageCache = [[SDImageCache alloc] initWithNamespace:@"nameSpaceImageCacheXPTO"];[_imageCache setMaxCacheAge:oneHour * 3];// 3 heures
Vérifiez si l'image (clé) est déjà dans le cache, sinon vous en demanderez une nouvelle et l'enregistrerez plus tard.
/////////
// * Prepar Key
/////////
NSString * key = url.absoluteString;
/////////
// * Get Local Image
/////////
[_imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {
if (image) {
completedBlock(image,nil); // return block
}else{
/////////
// * Request Image
/////////
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url
options:SDWebImageProgressiveDownload
progress:^(NSInteger receivedSize, NSInteger expectedSize) {}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (finished && image){
/////////
// * Save Image
/////////
[_imageCacheProgram storeImage:image
recalculateFromImage:NO
imageData:data
forKey:key
toDisk:YES];
completedBlock(image,error); // return block
}
}];
});
}
}];