Verschiedene Cache-Typen SDWebImage
-
21-12-2019 - |
Frage
Ich verwende SDWebImage für eine Weile zum Zwischenspeichern aller meiner Bilder, aber jetzt möchte ich mehr als einen Cache haben, um verschiedene Arten von Bildern zu gruppieren.Zum Beispiel drei Arten von Caches mit jeweils mehreren Bildern, also möchte ich zur Laufzeit einen davon löschen oder einen anderen haben setMaxCacheAge
Beispiel:typen bilder = Autobilder sind ein Typ, Motorrad ist ein anderer...flugzeuge andere..so.Nachdem ich diese Bilder gespeichert habe, möchte ich nur den Cache der Motorradbilder löschen oder löschen (ein Typ)
Jetzt habe ich das aber ist für jedes Bild zwischengespeichert:
SDImageCache * sDImageCache = [SDImageCache sharedImageCache];
[sDImageCache setMaxCacheAge:60*60*24];
...
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
[imageCache cleanDisk];
-
Ich habe das gesehen, aber ist das wirklich das, was ich will?
SDImageCache *imageCache = [[SDImageCache-Zuweisung] initWithNamespace:@"Mein Namensraum"];
Lösung
Ok, ich finde heraus, wie es geht...und ich werde teilen
Zuerst entfernte ich alle Beweise von [SDWebImageManager sharedManager]
, weil ich alles manuell machen will.
Dann [SDWebImageDownloader sharedDownloader]
um eine neue anzufordern und queryDiskCacheForKey (SDImageCache)
so erhalten Sie ein lokales Image (Festplatte oder Speicher)
Wie:
Erstellen Sie einen neuen Bildcache mit einem bestimmten Namespace
selbst.imageCache = [[SDImageCache-Zuweisung] initWithNamespace:@"nameSpaceImageCacheXPTO"];[_imageCache setMaxCacheAge:Eine Stunde * 3];// 3 stunden
Überprüfen Sie, ob sich das Bild (Schlüssel) bereits im Cache befindet, andernfalls wird ein neues angefordert und später gespeichert
/////////
// * 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
}
}];
});
}
}];