美文网首页
SDWebImage 指定存储的key

SDWebImage 指定存储的key

作者: 里克尔梅西 | 来源:发表于2021-07-26 15:40 被阅读0次

在项目中遇到这样的一个问题,图片返回的url因为是存在百度云上所以带authority认证的,即虽然是同一张图片,但是后缀不一致,这样就导致了sd_setImageUrl的方法中,每次默认都缓存新的一张图片,所以需要截取“?”前的内容,来作为指定的key进行缓存。
这里用到了SDWebImage的5.0版本后加入的context参数
具体代码如下所示:

+ (NSString *)getOtherCacheKey:(NSString *)urlStr {
    NSString *keyString = [urlStr componentsSeparatedByString:@"?"].firstObject;
    return keyString;
}
+ (void)cacheImgView:(UIImageView *)myImgView url:(NSString *)urlString placeholderImage:(NSString *)placeholderImage{
    NSString *headUrlPre = [JCJDFunction getOtherCacheKey:urlString];
    UIImage *cacheImage = [[SDImageCache sharedImageCache] imageFromCacheForKey:headUrlPre];
    if (cacheImage != nil) {
        myImgView.image = cacheImage;
    } else {
        
        NSURL *url = [NSURL URLWithString:urlString];

        //通过context参数指定存储的key,指定的key为截取urlString中"?"前面的内容
        SDWebImageCacheKeyFilter *cacheKeyFilter = [SDWebImageCacheKeyFilter cacheKeyFilterWithBlock:^NSString * _Nullable(NSURL * _Nonnull imageURL) {
            if ([url isEqual:imageURL]) {
                return headUrlPre;
            } else {
                return url.absoluteString;
            }
        }];
        SDWebImageContext *context = [NSDictionary dictionaryWithObject:cacheKeyFilter forKey:SDWebImageContextCacheKeyFilter];
        
        [myImgView sd_setImageWithURL:[NSURL URLWithString:cacheImage != nil ? headUrlPre : urlString] placeholderImage:[UIImage imageNamed:placeholderImage] options:0 context:context];
    }
}

参考资料:

相关文章

网友评论

      本文标题:SDWebImage 指定存储的key

      本文链接:https://www.haomeiwen.com/subject/bgxgmltx.html