سؤال

أنا أستخدم 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
                                                                        }
                                                                    }];

            });
        }
    }];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top