首页 > ios sdwebimage的独立缓存问题

ios sdwebimage的独立缓存问题

如题
SDImageCache *imageCache= [[SDImageCache alloc] initWithNamespace:@"mynamespace"];

这一句是缓存目录对象

然后提供了一个方法
[imageCache queryDiskCacheForKey:url done:^(UIImage *image, SDImageCacheType cacheType) {}];
这是查找自己的缓存目录

这样确实能查找出图片 可是性能上有问题 这一句是查找的物理磁盘上的 并没有从内存中查找 性能上不是最好 那有没有什么方法能直接从内存中查找

我说一下我的业务 现在业务需要缓存两部分 一部分直接用sd的可以直接解决 另一部分是缓存后不能清除的 要自己管理 这时我就建了另一个缓存目录 可是我翻源码发现 只能从物理磁盘上取图片 这样性能不爽 那有没有什么方法能直接从内存中查找 真心求解答!!


下面的方法,扩展性很低,并且其他开发者需要知道新的类方法。
所以,建议继承SDImageCache ,并重写里面的部分方法。这样可以做到对无关的开发者透明处理。

可以参考下面的代码解决问题。

@interface SDImageCache (Sun)

+ (UIImage *)imageFromMemoryCacheForKey_v2:(NSString *)key;
+ (UIImage *)imageFromDiskCacheForKey_v2:(NSString *)key;

@end

@implementation SDImageCache (Sun)


+ (instancetype)sunImageCaceh {
    static SDImageCache *imageCache;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        imageCache = [[SDImageCache alloc] initWithNamespace:@"posters"];
        imageCache.maxCacheSize = 1024*30*1024;
    });
    return imageCache;
}

+ (UIImage *)imageFromMemoryCacheForKey_v2:(NSString *)key {
    UIImage *memoryImage = [[SDImageCache sunImageCaceh] imageFromMemoryCacheForKey:key];

    if(!memoryImage) {
        memoryImage = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:key];
    }
    return memoryImage;
}

+ (UIImage *)imageFromDiskCacheForKey_v2:(NSString *)key {
    UIImage *diskImage;
    diskImage = [[SDImageCache sunImageCaceh] imageFromDiskCacheForKey:key];

    if(!diskImage) {
        diskImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:key];
    }
    return diskImage;
}

@end

@interface sun : NSObject

@end

@implementation sun



- (void)loadImage {


    NSString *imagePath = [HUWebImage cacheImagePath:@"posters"];
    NSString *cachePathForKey = [HUWebImage cachePathForKey:url inPath:imagePath];

    UIImage *image;
    image = [SDImageCache imageFromMemoryCacheForKey_v2:cachePathForKey];
    if(!image) {
        image = [SDImageCache imageFromDiskCacheForKey_v2:cachePathForKey];
    }
    if(!image) {
        NSURL *imageURL = [NSURL URLWithString:i];
        // 网络下载
        [SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL options:SDWebImageLowPriority | SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {} completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
             if(image && finished && data) {
                 // 根据需求存入不同的磁盘
                 [imageCache storeImage:image forKey:url toDisk:true];
                 [[SDImageCache sharedImageCache] storeImage:image forKey:url toDisk:true];
             }
         }];
    }
}

@end
【热门文章】
【热门文章】