iOS面试总结

【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,调用SDImageCodersManagerdecodedImageWithData...进行解析,根据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写入本地
 }
});
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容