最近学习SDWebImage第三方库,了解它如何做到同一时间不做重复请求的过程,故分享和保存一下,已方便随时温故。
SDWebImage 下载的工作主要由SDWebImageDownloader负责,直接上代码,下图是下载相关的方法:
下载图片
由上图可以看到所有的操作都是锁在由信号量的锁里面,保证所有任务都是一条一条添加执行。而每个下载任务都会封装为一个操作对象,放在一个可变的字典里,图片下载地址URL为key,操作为value。把下载进度和下载完成的回调保存在操作对象里,操作对象保存在token里。很好的处理了这个问题。