sdwebimage缓存图片对比问题

在iOS开发中,使用SDWebImage时遇到图片缓存问题。当URL对应的图片更新时,SDWebImage是否会重新下载?答案是使用缓存,因为SDWebImage基于URL的MD5值在磁盘中存储图片,导致新旧图片无法区分。不过其缓存策略确保了高效加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开发IOS项目的时候,发现一个关于第三方框架sdwebimage的图片缓存的问题。搜了一下百度,发现有人已经提出同样的问题,如下:

有个问题请教一下各位,就是用sdwebimage下载图片的时候会缓存到手机上,那么我把同一个url下面的图片换了,这个时候再用sdwebimage加载这个url,他是用缓存的还是重新下载了?

如果,她加载了缓存的图片那么就错了,因为这个url下的图片已经换掉了,如果他从新下载了,他是如何对比缓存图片的不同的。


然后,我搜到了解答,答案如下:

答案:使用缓存。
原因:图片在NSCache中是以absolute url作为key存储,在磁盘缓存目录中是以原始url进行md5后的字符串作为文件名存储。查询匹配的时候只按key和文件名匹配。
证据:NSCache

- (NSString *)cacheKeyForURL:(NSURL *)url
{
#if NS_BLOCKS_AVAILABLE
    if (self.cacheKeyFilter)
    {
        return self.cacheKeyFilter(url);
    }
    else
    {
        return [url absoluteString];
    }
#else
    return [url absoluteString];
#endif
}

//SDImageCache
- (NSString *)cachePathForKey:(NSString *)key
{
    const char *str = [key UTF8String];
    unsigned char r[CC_MD5_DIGEST_LENGTH];
    CC_MD5(str, (CC_LONG)strlen(str), r);
    NSString *filename = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                          r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]];

    return [diskCachePath stringByAppendingPathComponent:filename];
}
//备注:以上结论在2.x版本下有效,3.0以上版本不了解。


所以,sdwebimage的缓存策略还是不错的,以后尽管放心地调用setImagewithUrl的方法,他会异步下载和自己处理缓存

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值