SDWebImage分析
1.加载大图片内存为什么暴涨
图片解码很耗时。 异步。
当用 UIImage 或 CGImageSource 的那几个方法创建图片时,生成的对象不会立即解码,而是当图片设置到 UIImageView 或者 CALayer.contents 中去,并且 CALayer 被提交到 GPU 前,CGImage 中的数据才会得到解码。解码都是在主线程中,影响性能.
2.基础流程
2.1取消当前NSOperation请求 :
从 UIView关联对象 Dictionary 获取当前的Op,key是 各种UI 不同状态的key,比如 UIImageViewHighlightedWebCacheOperationKey 或者UIImageViewImageLoad
主线程设置:placehoder
开启一个NSOpertaion请求
SDWebImageManager.sharedManager
同时设置 key,开始进行操作
2.1SDWebImageManager.sharedManager
2.1.0 SDWebImageManager核心变量
NSMutableArray *runningOperations:运行任务数组
SDImageCache *imageCache:缓存器
SDWebImageDownloader *imageDownloader;下载器
2.1.1 是否存储在失败faileURLs
@synchronized (self.failedURLs) {
isFailedUrl = [self.failedURLs containsObject:url];
}
2.1.2
SDWebImageCombinedOperation
封装一个NSOperation *cacheOperation 还有协议
@synchronized (self.runningOperations) {
[self.runningOperations addObject:operation];
}
2.1.3. 生成
operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {
主读取NSCache
创建一个NSOp, 异步串行
2.1.4子任务 下载器
id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url
并发队列 5