分享

SDWebImage笔记

 最初九月雪 2015-04-09

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完成,

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多