1,从内存中(字典)找图片(当这个图片在本次程序中加载过),找到直接使用。
2,从沙盒中找,找到直接使用,缓存到内存。
3,从网络上获取,使用,缓存到内存,缓存到沙盒。
SDWebImage中为UIView提供了一个分类叫做 WebCache,这个分类同时提供了很多类似的方法,这些最终会调用一个同时具有optionProgressBlock completionBlock的方法,而这个类最终被调用的方法会首先检查是否传入了placeholderImage以及对应的参数,并设置placeholderImage。
然后,会获取SDWebImageManager中的单例调用一个downloadImageWithURL:的方法获取图片,而这个manager获取图片的过程大体上分为两部分,它首先会在SDWebImageCache中寻找图片是否有对应的缓存,它会以URL作为数据的索引先在内存中寻找是否有对应的缓存,如果缓存未命中就会在磁盘中利用MD5处理过的Key来继续查询对应的数据,如果找到了,就会把磁盘中的缓存备份到内存中。
然而,假设我们在内存和磁盘缓存中都没有命中,那么manager就会调用它特有的一个SDWebImageDownloader对象的方法downloadImageWithURL:来下载图片,这个方法会在执行的过程中调用另一个方法addProgressCallback:andCompletedBlock:forURL:createCallback:来存储下载过程中和下载完成的回调,当回调块是第一次添加的时候,方法会实例化一个NSMutableURLRequest和SDWebImageDownloaderOperation,并将后者加入Downloader持有的下载队列开始图片的异步下载。而在图片下载完成之后,就会在主线程设置image属性,完成整个图像的异步下载和配置。