ios - 不同的缓存类型 SDWebImage

标签 ios objective-c caching sdwebimage image-caching

我使用 SDWebImage 缓存我所有的图像有一段时间了,但现在我想要有多个缓存来对各种类型的图像进行分组。例如三种缓存,每一种都有几个图像,所以在运行时我想清除其中一个或者有不同的 setMaxCacheAge

例子: types images = 汽车图像是一种类型,摩托车是另一种类型...飞机其他...像这样。存储此图像后,我只想删除或清除摩托车图像(一种类型)的缓存

现在我有了这个,但它适用于缓存的每个图像:

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"];

Using Asynchronous Image Caching Independently

最佳答案

好的,我知道怎么做了......我会分享

首先,我删除了所有 [SDWebImageManager sharedManager] 的证据,因为我想手动完成所有操作。

然后 [SDWebImageDownloader sharedDownloader] 请求新的和 queryDiskCacheForKey (SDImageCache) 获取本地镜像(磁盘或内存)

如何:

使用特定命名空间创建新的 imageCache

self.imageCache = [[SDImageCache alloc] initWithNamespace:@"nameSpaceImageCacheXPTO"]; [_imageCache setMaxCacheAge:oneHour * 3]; // 3 hours

检查图像( key )是否已经在缓存中,如果没有将请求新的并稍后保存

    /////////
    // *    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
                                                                        }
                                                                    }];

            });
        }
    }];

关于ios - 不同的缓存类型 SDWebImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24012958/

相关文章:

ios - “谢谢 - 您的交易已成功”弹出窗口 - Storekit 代码的哪一部分触发了它?

ios - XCode:为什么我的核心数据更改只有在重新启动模拟器后才会出现?

ios - 完善我的 MagicalRecord 导入

ios - Firebase Cloud Messaging - 检查现有或可用的主题

c++ - Qt:将 native 操作系统特定代码添加到项目

c# - 为什么 Entity Framework 6.x 不缓存结果?

ruby-on-rails - 如何强制清除 Rails SQL 缓存?

iphone - 如何显示电子邮件已发送通知 ipad

ios - 在哪里声明多次调用的方法的变量

asp.net - 在 asp.net httpContext.Cache 中存储/检索项目的最有效方法是什么