当使用SDWebImage时,如果用相同图片名的图片替换掉了原始缓存的图片,当再次请求的时候,还是使用的缓存图片,图片不会发生改变
原因:图片在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以上版本不了解。