对sdwebimage的浅分析

对sdwebimage的浅分析

ID:11204744

大小:146.65 KB

页数:14页

时间:2018-07-10

对sdwebimage的浅分析_第1页
对sdwebimage的浅分析_第2页
对sdwebimage的浅分析_第3页
对sdwebimage的浅分析_第4页
对sdwebimage的浅分析_第5页
资源描述:

《对sdwebimage的浅分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、对SDWebImage的浅分析SDWebImage源代码分析SDWebImage使用——一个可管理远程图片加载的类库SDWebImage托管在github上。https://github.com/rs/SDWebImage这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。将SDWebImage类库添加入工程时,一定注意需要添加MapKit.framework,如图所示,因为MKAnnotationView+WebCac

2、he.h依赖该framework。SDWebImage库的作用:通过对UIImageView的类别扩展来实现异步加载替换图片的工作。主要用到的对象:1、UIImageView(WebCache)类别,入口封装,实现读取图片完成后的回调2、SDWebImageManager,对图片进行管理的中转站,记录那些图片正在读取。向下层读取Cache(调用SDImageCache),或者向网络读取对象(调用SDWebImageDownloader)。实现SDImageCache和SDWebImageDownloa

3、der的回调。3、SDImageCache,根据URL的MD5摘要对图片进行存储和读取(实现存在内存中或者存在硬盘上两种实现)实现图片和内存清理工作。4、SDWebImageDownloader,根据URL向网络读取数据(实现部分读取和全部读取后再通知回调两种方式)其他类SDWebImage支持异步的图片下载+缓存,提供了UIImageView+WebCacha的category,方便使用。纪录一下SDWebImage加载图片的流程。1.入口setImageWithURL:placeholderIma

4、ge:options:会先把placeholderImage显示,然后SDWebImageManager根据URL开始处理图片。2.进入SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给SDImageCache从缓存查找图片是否已经下载queryDiskCacheForKey:delegate:userInfo:.3.先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate回调imag

5、eCache:didFindImage:forKey:userInfo:到SDWebImageManager。4.SDWebImageManagerDelegate回调webImageManager:didFinishWithImage:到UIImageView+WebCache等前端展示图片。5.如果内存缓存中没有,生成NSInvocationOperation添加到队列开始从硬盘查找图片是否已经缓存。6.根据URLKey在硬盘缓存目录下尝试读取图片文件。这一步是在NSOperation进行的操作,

6、所以回主线程进行结果回调notifyDelegate:。7.如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate回调imageCache:didFindImage:forKey:userInfo:。进而回调展示图片。8.如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调imageCache:didNotFindImageForKey:userInfo:。9.共享或重新生成一个下载器SDWebI

7、mageDownloader开始下载图片。10.图片下载由NSURLConnection来做,实现相关delegate来判断图片下载中、下载完成和下载失败。1.connection:didReceiveData:中利用ImageIO做了按图片下载进度加载效果。2.connectionDidFinishLoading:数据下载完成后交给SDWebImageDecoder做图片解码处理。3.图片解码处理在一个NSOperationQueue完成,不会拖慢主线程UI。如果有需要对下载的图片进行二次处理,最好

8、也在这里完成,效率会好很多。4.在主线程notifyDelegateOnMainThreadWithInfo:宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo:回调给SDWebImageDownloader。5.imageDownloader:didFinishWithImage:回调给SDWebImageManager告知图片下载完成。1.通知所有的downloadDelegates下载完成,回调给

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。