1.先显示placeholderimage(占位图片),再根据URL来在本地查找图片
2.从缓存中根据cachekey来查找图片是否已经在缓存当中
3.如果缓存中已经有图片缓存,进行回调并将图片展示
4.如果内存中没有该图片的缓存,那么生成NSInvocationOperation添加到队列,从硬盘中查找图片是否已经被下载。
5.根据URLkey在硬盘缓存目录下尝试读取图片文件,这一步是在NSOperation在操作,所以要回到主线程进行结果回调。
6.如果上一步操作从硬盘中读取到了图片,那么将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存),然后进行回调展示图片
7.如果从硬盘缓存目录读取不到图片,那就说明所有的缓存中都不存在该图片,那么需要下载图片
8.共享或者创建一个下载器,开始下载图片。
9.图片下载由NSURLConnection来做,实现相关的delegate来判断图片的下载状态,下载中、下载完成、下载失败。
10利用imageIO做按图片下载进度加载效果
11.数据下载完成后交给SDWebImageDecoder做图片解码处理。
12.图片解码处理在一个NSOperationQueue
完成,不会拖慢主线程的UI,所有如果有需要对下载的图片进行二次处理时,最哈也在这里完成,效率会好很多。
13.当主线程中宣告解码按成 之后,回调给下载器,下载器再回调给回调给 SDWebImageManager,告知图片下载完成。
14.通知所有的下载器下载完成,回调给所需要的地方来进行图片的展示。
15.将图片保存到到SDImageCache中,内存缓存和硬盘缓存都要保存。
16.写文件到硬盘在单独的NSInvocationOperation中进行,避免拖慢主线程。