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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容