目的
在使用SDWebImage加载图片时,尤其是加载gif等大图时,SDWebImage会将图片缓存在内存中,这样是非常吃内存的,这时我们就需要在适当的时候去释放一下SDWebImage的内存缓存,才不至于造成APP闪退。
SDWebImage 提供了 UIImageView、UIButton 、MKAnnotationView 的图片下载分类,只要一行代码就可以实现图片异步下载和缓存功能。
这样开发者就无须花太多精力在图片下载细节上,专心处理业务逻辑。
SDWebImage 特点
-
提供 UIImageView, UIButton, MKAnnotationView 的分类,用来显示网络图片,以及缓存管理
异步下载图片
异步缓存(内存+磁盘),并且自动管理缓存有效性
后台图片解压缩
同一个 URL 不会重复下载
自动识别无效 URL,不会反复重试
不阻塞主线程
高性能
使用 GCD 和 ARC
支持多种图片格式(包括 WebP 格式)
支持动图(GIF)
4.0 之前的动图效果并不是太好
4.0 以后基于 FLAnimatedImage加载动图
注:本文选读的代码是 3.7.3 版本的,所以动图加载还不支持 FLAnimatedImage。
SDWebImage 使用
1. UITableView 中使用 UIImageView+WebCache
复制代码
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.easck.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
2. 使用回调 blocks
在 block 中得到图片下载进度和图片加载完成(下载完成或者读取缓存)的回调,如果你在图片加载完成前取消了请求操作,就不会收到成功或失败的回调
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.easck.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
... completion code here ...
}];
3. SDWebImageManager 的使用
UIImageView(WebCache) 分类的核心在于 SDWebImageManager 的下载和缓存处理,SDWebImageManager将图片下载和图片缓存组合起来了。SDWebImageManager也可以单独使用。
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager loadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// do something with image
}
}];
4. 单独使用 SDWebImageDownloader 异步下载图片
我们还可以单独使用 SDWebImageDownloader 来下载图片,但是图片内容不会缓存。










