Различные типы кэша 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 с определенным пространством имен.
self.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
}
}];
});
}
}];