美文网首页
iOS源代码分析——SDWebImage

iOS源代码分析——SDWebImage

作者: e32950f79177 | 来源:发表于2017-07-03 15:40 被阅读0次

    主要作用:异步加载图片并且提供缓存机制。
    主要用到的类别: SDWebImage+WebCache
    主要用到的方法: [self.imageView sd_setImageWithURL: placeholderImage:]
    核心方法: [self.imageView sd_setImageWithURL:
    placeHolderImage:
    options:
    progress:
    completed:]
    加载选项options(共13个,这里只列出常用的)
    默认加载选项:
    SDWebImageRetryFailed(保证不会多次尝试访问一个失效或者错误的URL)
    SDWebImageLowPriority (当scriollview滑动时 图片不会被加载)
    可选选项
    SDWebImageCacheMemoryOnly (不支持磁盘缓存,只有内存缓存)
    SDWebImageProgressiveDownload (渐进式下载)
    SDWebImageRefreshCached (当一个URL对应的图片改变了,会更新缓存)
    加载流程:
    1.[self sd_cancelCurrentImageLoad]
    保证当前没有正在进行的异步下载操作,不会与即将进行的操作发生冲突
    2.设置占位符
    if (!(options & SDWebImageDelayPlaceholder)) {
    self.image = placeholder;
    }
    如果传入的 options 中没有 SDWebImageDelayPlaceholder(默认情况下 options == 0), 那么就会为 UIImageView 添加一个临时的 image, 也就是占位图.
    3.获取图片
    判断传入的URL是否为空,如果为空做异常处理。如果非空一个全局的单例SDWebImageManager 就会调用以下方法
    [SDWebImageManager.sharedManager
    downloadImageWithURL:
    options:
    progress:
    completed:]
    SDWebImageManage是UIImageView+WebCache 和 SDWebImageDownloader, SDImageCache 之间构建一个桥梁 起到协调工作的作用。
    具体源码实现:
    首先判断URL是否被正确传入。传入的NSString类型被转换为NSURL,如果转换失败那么URL被赋值为空,这个下载操作就会出错,做异常处理。
    如果传入的URL正确,那么会调用[self cacheKeyForURL:url]方法找到key再调 用operation.cacheOperation=[self.imageCache queryCacheOperationForKey:key done:^(UIImage *cachedImage, NSData *cachedData, SDImageCacheType cacheType) {} 在缓存中查找以前是否下载过相同的图片。如果下载过拿到image赋值给imageview,如果没有就调用SDWebImageDownloader的实例方法id <SDWebImageOperation> subOperation = [self.imageDownloader downloadImageWithURL:url
    options:downloaderOptions
    progress:progressBlock
    completed:^(UIImage *downloadedImage, NSData *data, NSError *error, BOOL finished) { ... }];
    如果返回正确的downloadedImage赋值给imageview,并且调用SDWebImageCache的实例方法[self.imageCache storeImage:downloadedImage
    recalculateFromImage:NO
    imageData:data
    forKey:key
    toDisk:cacheOnDisk];
    来存储这个图片数据。

    相关文章

      网友评论

          本文标题:iOS源代码分析——SDWebImage

          本文链接:https://www.haomeiwen.com/subject/bitzcxtx.html