다양한 캐시 유형 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
}
}];
});
}
}];