أنواع مختلفة من ذاكرة التخزين المؤقت 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
}
}];
});
}
}];