https://github.com/draveness/analyze/blob/master/contents/SDWebImage/iOS%20源代码分析%20---%20SDWebImage.md
https://www.jianshu.com/p/728f71b9fe28
大概流程:
- 给button imageview等加分类 ->入口函数 ----> uiview分类->真正调用的函数
2.通过runtime给view加属性:url等,operation(继承自nsobject)属性。
- 使用manager ---》 使用cacher 查找-> 内存中是否有-> 异步硬盘中是否有。
4.cacher查找内存使用NSCache,线程安全,NSCache在收到内存警告的时候会释放自身的一部分资源。
5.异步硬盘获取使用 串行队列,保证线程安全。 2周过期。 获取data数据,然后解码,然后解压缩,然后给内存缓存。 解压缩使用画布形式。
- 没有查到,使用downloaderManger下载。
7.自定义NSOperation封装下载任务,然后使用OperationQueue 最大并发6个。 FIFO,可以通过设置依赖不FIFO。
8.下载后直接解压缩。 然后通过block返回。
9.可以使用Prefetcher来批量下载图片。
10.图片的编码是通过图片二进制数据的文件头来确定格式的。
11.可以将大图修改成小图来显示,提升性能。
12.使用despatch_semepohre来加锁。
13.整个SDWebimage设计的思路是分工合作的思路,将大的任务切分为小任务。
14.解压缩现在使用SDWebimageDecoderManager管理。
15.现在使用NSCache->Maptable来缓存内存。