您的位置:首页 > 其它

SDWebImageRefreshCached

2015-06-05 18:16 357 查看
异步加载图片方法:

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;

url
图片的地址
placeholder   网络图片在尚未加载成功时显示的图像

默认情况下,SDWebImage会忽略Header中的缓存设置,将图片以url为key进行保存,url与图片是一一对应关系。所以请求同一个url时,SDWebImage会从缓存中取得图片。一般的情况下用此方法可以满足我们的应用要求,但是如果你请求同一个url,而这张图片在服务器端更新了,本地客户端再次请求时还是会返回缓存中的旧图片,例如加载头像类经常更新的图片时,就会出现头像不能更新的问题,由于url与图片一一对应,一种解决的办法是改变部分url地址方式实现更新,不过这种方法操作起来很复杂,下面介绍一个更方便的办法

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;

我们将第三个参数设置为SDWebImageRefreshCached就可以实现图片更新操作了,使用方法很简单,如下:

NSURL *url = [NSURL URLWithString:@"http://www.example.com/image.png"];
UIImage *defaultImage = [UIImage imageNamed:@"default.png"];
[self.imageView setImageWithURL:url placeholderImage:defaultImage options:SDWebImageRefreshCached];



三、缓存的计算及清理

1、缓存计算,这里的缓存计算,只计算SDWebImage的缓存,沙盒文件夹中的其它文件并不包括在内:

[SDWebImageManager.sharedManager.imageCache
calculateSizeWithCompletionBlock:^(NSUInteger fileCount, NSUInteger totalSize) {

}];


2、缓存清理

在SDWebImage中有两种缓存,一种是磁盘缓存,一种为内存缓存,框架都提供了相应的方法:

[[[SDWebImageManager sharedManager] imageCache] clearDisk];
[[[SDWebImageManager sharedManager] imageCache] clearMemory];


不过这里要特别注意一下,在IOS7中你会发现使用这两个方法缓存总清除不干净,即使断网下还是会有数据。这是因为在IOS7中,缓存机制做了修改,使用上述两个方法只清除了SDWebImage的缓存,没有清除系统的缓存,所以我们可以在清除缓存的代理中额外添加以下:

[[NSURLCache sharedURLCache] removeAllCachedResponses];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: