【1】SDWebImage 5.0流程简述:
1.调用sd_setImageWithURL...方法
2.调用sd_cancelImageLoadOperationWithKey取消正在进行的任务
4.manager调用 loadImageWithURL...,加载图片。(如果url是失败过的或者重试也失败的请求,直接调用callCompletionBlockForOperation...退出)
5.将任务operation(SDWebImageCombinedOperation类型)加入runningOperations容器(NSMutableSet)
6.调用callCacheProcessForOperation...从缓存加载图片
1⃣️从内存中通过key取相应的image
2⃣️从磁盘取相应data,调用SDImageCodersManager的decodedImageWithData...进行解析,根据data的第一个字节判定图片类型,调用相关的解析类进行解析,磁盘的所有操作封装到了block中并放在@autoreleasepool中
解析的过程:
将data类型转化为CGImageSourceRef,通过CGImageSourceGetCount获取相应的图片个数
如果是1,直接将 data转为image
如果大于1,通过遍历CGImageSourceRef从中取出CGImageRef,并转化为image存到帧数组
最后别放了释放CFRelease(CGImageSourceRef类型对象)
7.调用callDownloadProcessForOperation...进行图片下载
8.下载完成调用callStoreCacheProcessForOperation...,
可存储原始图片(包裹在@autoreleasepool中),也可存储转化的图片(包裹在@autoreleasepool中)
存到内存中:
存到磁盘中:
dispatch_async(self.ioQueue, ^{
@autoreleasepool {
//存储逻辑
1.检查图片是否包含alpha channel 设置图片的类型 png或者jpeg
2.根据格式编码成data类型(通过CGImageDestinationRef 和 CGImageDestinationAddImage)
3.调用NSFileManager写入本地
}
});