SDWebImage
https://github.com/rs/SDWebImage
提供一个UIImageView 类别以支持加载来自网络的远程图片。
具有缓存管理,异步下载,同一个URL下载次数控制和优化等
UITableView UIImageView +webCache 类
UIImageView +WebCache.h tableView cellForRowAtIndexPath
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cel = [tableView dequeReuseableCellWithIdentifier.MyIdentifier]
if(cell == nil) {
cell =
}
[cell.imageView setImageWithURL:[NSURL URLWithString:@"htt://www.domain/path/to /image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"];
cell.textLabel.text = @"MyText";
return cell;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
UIImage *cacheImage = [manager imageWithURL:url];
if(cachedImage) {
} else {
[manager downloadWithURL:url delegate:self];
}
protocol webImageManager:didFinishWithImage方法
downloader= [SDWebImageDownloader downloaderWithURL:url delegate:self]
独立的异步图片缓存
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完成,