SDWebImage 内部原理

现在经常遇到问到三方原理,比如SDWebImage,涉及哪些关键类,哪些缓存策略等等。这块具体分析加载一个图片原理流程:

1、入口 setimagewithURL:placeholder,会把placeholderImage显示,SDWebImageManager根据URL开始处理图片。

2、进入SDImagecache从缓存中查找图片是否已经下载

3、先从内存图片缓存是否查找是否有图片,如果内存中有图片缓存,SDImageCacheDelegate回调imageCache:didfinishimage到SDWebimageMnager

4、如果内存缓存中没有,生成NSInvocationOperation,添加到队列开始从硬盘查找图片是否已经缓存。

5、根据URLKey 在硬盘缓存目录下尝试读取图片文件。

6、如果上一步从硬盘读取到图片,将图片添加到内存缓存中,SDImagecachedelegate回调didfindImage进而回调展示图片。

7、如果从硬盘缓存目录读取不到图片,说明缓存不存在该图片,需要下载图片。

8、共享或重新生成一个下载器SDWebImageDownloader 开始下载图片

9、图片下载由NSURLConnection来做,实现相关带来判断下载中,下载完成,下载失败。

10、didreceivedata中利用ImageIO做了图片下载进度加载效果。

11、图片下载完以后交给SDWebImageDecoder做图片编码处理。

12、图片解码在一个nsoperationqueue完成,不会拖慢主线程。

13、在主线程notifyDelegate。。。within宣告解码完成 回调给SDWebImageDownloader。

14、回调给ImageDownloader:didfinishimage告知图片下载完成。

15、通知所有downloaddelegate下载完成,回调给需要的地方展示。

16、将图片保存到SDimagecache中。内存缓存和硬盘缓存同时保存。

17、初始化的时候注册一些通知,内存警告或者后台清理内存图片缓存。

18、SDWebImagePrefetcher可以预先下载图片,方便后续使用。

你可能感兴趣的:(SDWebImage 内部原理)