SDWebImage框架来源 https://github.com/rs/SDWebImage
SDWebImage API文档 http://hackemist.com/SDWebImage/doc
UIImageView的类目,支持异步图片下载,支持缓存机制
这个库给UIImageView提供类目,支持远程下载图片(从网络上)
SDWebImage提供的功能:
- 一个UIImageView的类目,给 Cocoa Touch 框架添加了异步下载远程图片以及管理图片缓存的功能
- 一个图片的异步下载器
- 一个内存 + 磁盘的缓存机制,并自动管理
- gif动画支持
- WebP格式支持
- 后台解压图片
- 确保同样地 URL 不会重复的下载多次
- 确保无效的 URL 不会重复的链接
- 确保主线程永远不会阻塞
- 效果拔群!
- 使用GCD以及要求ARC
- 支持64位系统
SDWebImage的各个类的简介
- 图片下载以及下载管理器
SDWebImageDownloaderOperation
- 管理以及操作
SDWebImageOperation
- 是SDWebImage包的一部分
SDWebImageCompat:组件相关
SDWebImageDecoder:解码相关
- MKAnnotationView地图的注解View缓存
- 判断NSData是否什么类型的图片(例如:jpg,png,gif)
- UIButton类目
- gif类目
- 图片其他类目
UIImage+WebP
UIImageView+WebCache
SDWebImage快速使用
- UIImageView+WebCache:为UIImageView加载图片
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]];</span>
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];</span>
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... 下载完成后的代码 ...}];</span>
- SDWebImageDownloader:独立的下载图片的功能(没有缓存机制)
<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *oneImageURL = @"http://wallpapers.wallbase.cc/rozne/wallpaper-573934.jpg";
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:oneImageURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize)
{
//此处为下载进度
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
{
//下载完成后进入这里执行
}];</span>
- SDWebImageManager:独立的下载图片的功能(有缓存机制)
<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *oneImageURL =
@"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
[[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:oneImageURL]
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize)
{
//此处为下载进度
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
//下载完成后进入这里执行
}];</span>
- 清除缓存文件
<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] clearDisk];</span>
- 判断本地缓存中是否存在网络中的图片
<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
[[SDImageCache sharedImageCache] diskImageExistsWithKey:imageNetURL];</span>
- 获取缓存图片张数
<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] getDiskCount];</span>
- 获取所有缓存图片的总大小
<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] getSize];</span>
- 直接从缓存中提取图片
<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
[[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imageNetURL];</span>
- 直接删除缓存中得图片
<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
[[SDImageCache sharedImageCache] removeImageForKey:imageNetURL];</span>
独立的异步图片缓存
SDWebImage支持异步的图片下载+缓存
1 入口setImageWithURL:placeholderImage:option 先把placeholderImage显示后,
然后SDWebImageManage根据URL开始处理图片
进入SDWebImageManager--downloadWithURL:delegate:options:userinfo
交给SDImageCache从缓存查找图片是否已下载
queryDiskCacheForKey:delegate:userinfo
先从内存图片查找是否有图片, 如果内存中已经有图片存,
imageCach:didFindImage:forKey:userInfo
如果内存中没有,生成NSInvocationOperation 到开始从硬盘查找图片图片是否已 存
根据URLKey 在硬盘存目录下尝试读取图片,这是NSOperation操作,notifyDelegate
imageCache:didNotFindImageForKey:userinfo
共享或重新生成一个下载器SDWebImageDownloader开始下载图片。
下载由NSURLConnection 来做,实现相关delegate 来判断图片下载中。
connection:didReceiveData:中利用IMageIO做了按图片下载进度加载效果。
connection:didFinishLoading 数据下载完成后交给SDWebImageDecoder做
图片解码处理
NSOperationQueue完成,不会拖慢主线程UI,
notifyDelegateOnMainThreadWithInfo宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo
image
保存到SDImageCache中, 内存存和硬盘缓存同时保存。
NSInvocationOperation完成。