SDWebImage的原理

参考自:http://wenku.baidu.com/link?url=ZeaVmCbV5fxnRisqy2Fj8uWKGBlqwEPwOvOLax-_9PNwsqJBgGLeo8qna-SXltvllTU91cNDSO0F2_DRTrGYdw-C8yEFCNpnREOWiUMLaLW


SDWebImage提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。



SDWebImage加载图片的流程:
1.setImageWithURL:placeholderImage:options:
会先把placeholder显示,然后SDWebImageManager根据URL开始处理图片


2.从缓存中查找图片是否已经存在

i.如果内存缓存中有该图片的缓存,使用内存缓存显示;


ii.如果内存缓存中没有该图片的缓存,生成NSInvocationOperation添加到队列开始从硬盘中查找是否有该图片的缓存,如果有,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存),然后使用内存缓存显示;


iii.如果内存缓存和硬盘中都没有找到,通过NSURLConnection下载该图片,下载完后在单独的NSOperationQueue中完成图片解码,最后通知主线程并显示图片,并且将图片保存到SDImageCache中,内存缓存和硬盘缓存同时保存,硬盘缓存也以单独的NSInvocationOperation完成,避免拖慢主线程。




SDImageCache在初始化的时候会注册一些消息通知,在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片。


SDWebImage库的作用:通过对UIImageView的类别扩展来实现异步加载替换图片的工作


SDWebImage根据URL的MD5摘要对图片进行存储和读取


SDWebImage的数据管理分为两个部分,一个是内存层面,一个是硬盘层面

i.内存层面的相当于是个缓存器,以key-value的形式存储图片。当内存不够的时候会清楚所有缓存图片


ii.用搜索文件系统的方式做管理,文件替换方式是以时间为单位,剔除时间大于一周的图片文件


iii.当SDWebImageManager想SDImageCache要资源师,先搜索内存层面的数据,如果有直接返回,没有的话去访问磁盘,将图片从磁盘读取出来,然后解码,将图片对象放到内存层面做备份,再返回调用层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值