sdwebimage缓存图片对比问题

开发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的方法,他会异步下载和自己处理缓存

时间: 2024-10-10 08:12:32

sdwebimage缓存图片对比问题的相关文章

SDWebImage缓存图片和读取图片

NSString *urlStr: NSUrl *url = [NSURL URLWithString:urlStr]; //缓存图片 SDWebImageManager *manager = [SDWebImageManager sharedManager]; if (![manager diskImageExistsForURL:url]) { [manager downloadWithURL:url options:0 progress:^(NSInteger receivedSize,

SDWebImage缓存图片的机制(转)

SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图片的缓存实际应用的是NSURLCache自带的cache机制.而NSURLCache每次都要把缓存的raw  data 再转化为UIImage,就带来了数据处理和内存方面的更多操作.具体的比较在这里. SDWebImage提供了如下三个category来进行缓存. MKAnnotationView(

SDWebImage缓存图片的机制

本文转载值至:http://www.overcode.hk/?p=449 SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图片的缓存实际应用的是NSURLCache自带的cache机制.而NSURLCache每次都要把缓存的raw  data 再转化为UIImage,就带来了数据处理和内存方面的更多操作.具体的比较在这里. SDWebImage提供

SDWebImage异步的图片下载+缓存

SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征.使用示范的代码: UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category) 前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellFor

iOS网络编程(三) 异步加载及缓存图片---->SDWebImage

@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https://github.com/rs/SDWebImage 下载SDWebImage开源包2.将类包拖入工程,再导入MapKit.framework.ImageIO.framework两个框架3.SDWebImage是支持ARC的,在MRC的工程中要注意,可参考MRC工程配置ARC4.注意:SDWebImag

SDWebImage下载和缓存图片(UIImge)

1.用SDWebImage下载图片 #import "SDWebImageManager.h" [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"anurl"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { //处理下载进度 } completed:^(UIImag

【iOS开发之旅】AFNetworking与SDWebImage下载图片

AFNetworking与SDWebImage下载图片 // // ViewController.m // AFNetworkingDemo // // Created by ChenQianPing on 16/1/31. // Copyright © 2016年 chenqp. All rights reserved. // #import "ViewController.h" #import "AFNetworking.h" #import "UII

从图片对比的角度看启动时间

目前测启动时间用得较多的方法: 1.am start -W  只获取activity的启动时间 -W:等目标Activity启动后才返回 -n:用于设置Intent的Component 2.高速相机  以真实的用户体验去获取应用的启动时间 第一种可能得不到我们想要的. 第二种过于依赖硬件设备 冷启动:这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.用户在桌面上点击这个 Activi

缓存图片

public class MainActivity extends Activity { Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) {  case 1: ImageView iv = (ImageView) findViewById(R.id.image);  // 设置一个位图的方法  iv.setImageBitmap((Bitmap) msg.ob