不同的缓存类型SDWebImage
-
21-12-2019 - |
题
我正在使用SDWebImage一段时间缓存我的所有图像,但现在我想有多个缓存来分组各种类型的图像。例如三种缓存,每个缓存有几个图像,所以在运行时我想清除其中一个或有不同的 setMaxCacheAge
例子::类型图像 =汽车图像是一种类型,摩托车是另一种。..飞机等。.像这样。在我存储这些图像后,我只想删除或清除摩托车图像的缓存(一种类型)
现在我有这个,但对于缓存的每个图像:
SDImageCache * sDImageCache = [SDImageCache sharedImageCache];
[sDImageCache setMaxCacheAge:60*60*24];
...
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
[imageCache clearDisk];
[imageCache cleanDisk];
-
我看到了,但真的是我想要的吗?
SDImageCache*imageCache=[[SDImageCache alloc]initWithNamespace:@"myNamespace"];
解决方案
好吧,我想办法。..我会分享
首先,我删除了所有的证据 [SDWebImageManager sharedManager]
, ,因为我想手动完成所有操作。
然后 [SDWebImageDownloader sharedDownloader]
要求新的和 queryDiskCacheForKey (SDImageCache)
获取本地映像(磁盘或内存)
如何:
创建具有特定命名空间的新imageCache
自我。imageCache=[[SDImageCache alloc]initWithNamespace:@"nameSpaceImageCacheXPTO"];[_imageCache setMaxCacheAge:oneHour*3];//3小时
检查图像(密钥)是否已经在缓存中,如果没有,将请求新的图像并稍后保存
/////////
// * 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
}
}];
});
}
}];
不隶属于 StackOverflow