SDWebImage

一,首先,什么是 SDWebImage
1.SDWebImage 是在项目开发的过程当中,经常在异步加载图片的时候的开源框架.在日常的开发过程中,如果要缓存图片,首先要从网络上异步下载图片,然后通过 UIImageView将图片显示在屏幕上.这是一个经常使用的功能,基本上所有的联网应用程序都要用到的功能.
SDWebImage(提供异步加载图片/缓存管理/下载进度等,功能最齐全)
EGOImageLoading(之前的框架,缓存管理的时候比不上SDWebImage设计简单)
AFNetWorking( 只提供异步加载的功能,并无缓存管理);
2.在开发过程中,我们只使用它的异步加载图片及缓存管理的相关功能.

二.使用SDWebImage提供的类扩展实现异步加载图片
1.SDWebImage 提供了 UIImageView 的扩展类.我们只需要在头文件中引用就可以了.

#import "UIImage+WebCache.h"
//异步加载图片的方法
- (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];

三.缓存及清理.
在清除缓存之前,首先要进行缓存计算,只计算SDWebImage的缓存,沙盒文件夹中的其它文件夹并不包括在内

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

缓存清理
SDWebImage中有两种缓存,一种为内存缓存,另外一种为磁盘缓存,框架都提供了响应的方法:

//清楚磁盘缓存
[[[SDWebImageManager sharedManager] imageCache] clearDisk];
//清楚内存缓存
[[[SDWebImageManager sharedManager] imageCache] clearMemory];

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

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

你可能感兴趣的:(SDWebImage)