24(一) SDWebImage

SDWebImage中给UIImageView加载图片的逻辑:

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

SDWebImage中为UIImageView提供了一个分类:UIImageView+WebCache.h,这个分类中有一个最常用的接口,sd_setImageWithURL:placeholderImage:会在真实图片加载之前显示占位图片,当真实图片加载出来的时候,会替换掉占位图片。

加载图片的大致逻辑:

首先会在SDWebImageCache中寻找图片是否有对应的缓存,SDWebImageManager会以url作为数据的索引先在内存中寻找是否有对应的缓存,如果缓存没有找到,就会利用通过MD5处理过的key来继续在磁盘中查询相对应的数据,如果找到了,就会把磁盘中的数据加载到内存中(如果空闲内存过小,会先清空内存),并将图片显示出来,如果在内存和磁盘缓存中都没有找到,就会向远程服务器发送请求,利用NSURLConnection开始下载图片,实现相关的delegate判断图片下载中、下载完成和下载失败。下载完成后的图片会加入缓存,并写入磁盘中。

整个获取图片的过程都是在子线程中执行,获取到图片后回到主线程并将图片显示出来

==========================================

客户端的缓存机制:

缓存可以分为:内存数据缓存、数据库缓存、文件缓存

每次想获取数据的时候,先检测内存中是否有缓存,再检测本地有无缓存(数据库、文件),最后发送网络请求,将服务器返回的网络数据进行缓存,以便下次读取

==========================================

24(一) SDWebImage_第1张图片


24(一) SDWebImage_第2张图片

缓存模块实现分析

SDWebImage 自定义了一个自动清理的缓存,监听 UIApplicationDidReceiveMemoryWarningNotification 通知,来清理缓存

我们仍可以主动设置 SDWebImageCache的

NSUInteger maxMemoryCost //缓存最多能占用多少内存,默认是0,无限大

NSUInteger maxMemoryCountLimit //最多能缓存多少张图片

来限制 SDWebImage 的内存占用

你可能感兴趣的:(24(一) SDWebImage)