objective-c - ios sdwebimage的独立缓存问题

查看:82
本文介绍了objective-c - 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

这篇关于objective-c - ios sdwebimage的独立缓存问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆