第03天多线程网络:(09):SDWebImage框架内部实现逻辑

原创
2017/04/24 14:32
阅读数 18

#####一、SDWebImage框架内部实现逻辑 1.最常用的类UIImageView+WebCache.h

/**
 * Set the imageView `image` with an `url`, placeholder and custom options.
 *
 * The download is asynchronous and cached.
 *
 * @param url         The url for the image.
 * @param placeholder The image to be set initially, until the image request finishes.
 * @param options     The options to use when downloading the image. @see SDWebImageOptions for the possible values.
 *
 * 根据图片的url下载图片并设置到ImageView上面去,并设置占位图片,自定义下载选项
 * @param url           图片的URL
 * @param placeholder   显示在UIImageView上面的占位图片,直到图片下载完成
 * @param options       下载图片的选项。参考SDWebImageOptions的枚举值
 */
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;

1png

2.使用了SDWebImageManager类的下载方法

//加载图片的核心方法
/*
 * 如果URL对应的图像在缓存中不存在,那么就下载指定的图片 ,否则返回缓存的图像
 *
 * @param url 图片的URL地址
 * @param options 指定此次请求策略的选项
 * @param progressBlock 图片下载进度的回调
 * @param completedBlock 操作完成后的回调
 *      此参数是必须的,此block没有返回值
 *      Image:请求的 UIImage,如果出现错误,image参数是nil
 *      error:如果出现错误,则error有值
 *      cacheType:`SDImageCacheType` 枚举,标示该图像的加载方式
 *          SDImageCacheTypeNone:从网络下载
 *          SDImageCacheTypeDisk:从本地缓存加载
 *          SDImageCacheTypeMemory:从内存缓存加载
 *          finished:如果图像下载完成则为YES,如果使用 SDWebImageProgressiveDownload 选项,同时只获取到部分图片时,返回 NO
 *          imageURL:图片的URL地址
 *
 * @return SDWebImageOperation对象,应该是SDWebimageDownloaderOperation实例
 */
- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
                                         options:(SDWebImageOptions)options
                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
                                       completed:(SDWebImageCompletionWithFinishedBlock)completedBlock 

2.png

3.png

3.使用了SDWebImageDownloader类的方法

/*
 * 使用给定的 URL 创建 SDWebImageDownloader 异步下载器实例
 * 图像下载完成或者出现错误时会通知代理
 * url:要下载的图像 URL
 * SDWebImageDownloaderOptions:下载选项|策略
 * progressBlock:图像下载过程中被重复调用的 block,用来报告下载进度
 * completedBlock:图像下载完成后被调用一次的 block
 *      image:如果下载成功,image 参数会被设置
 *      error:如果出现错误,error 参数会被设置
 *      finished:
            如果没有使用 SDWebImageDownloaderProgressiveDownload,最后一个参数一直是 YES
 *          如果使用了 SDWebImageDownloaderProgressiveDownload 选项,此 block 会被重复调用
 *              1)下载完成前,image 参数是部分图像,finished 参数是 NO
 *              2)最后一次被调用时,image 参数是完整图像,而 finished 参数是 YES
 *              3)如果出现错误,那么finished 参数也是 YES
 *  返回值:可被取消的 SDWebImageOperation
 */
- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url
                                         options:(SDWebImageDownloaderOptions)options
                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
                                       completed:(SDWebImageDownloaderCompletedBlock)completedBlock;

4.png 5.png

4.使用了SDWebImageDownloaderOperation类的下载操作 所有的方法都在操作里面他重写了start方法里面了

/**
 *  Initializes a `SDWebImageDownloaderOperation` object
 *
 *  @see SDWebImageDownloaderOperation
 *
 *  @param request        the URL request
 *  @param options        downloader options
 *  @param progressBlock  the block executed when a new chunk of data arrives. 
 *                        @note the progress block is executed on a background queue
 *  @param completedBlock the block executed when the download is done. 
 *                        @note the completed block is executed on the main queue for success. If errors are found, there is a chance the block will be executed on a background queue
 *  @param cancelBlock    the block executed if the download (operation) is cancelled
 *
 *  @return the initialized instance
 */
/*
 * 初始化一个 `SDWebImageDownloaderOperation` 对象
 * request:请求对象
 * options:下载选项
 * progressBlock:新的数据块到达时执行的 block(下载进度),即进度回调
 * completedBlock:
            1)下载结束后执行的 block
            2)注意:如果下载成功,completion block 在主队列执行。如果出现错误,block 可能会在后台队列执行
 * cancelBlock:如果下载(操作)被取消,执行的 block
 */
- (id)initWithRequest:(NSURLRequest *)request
              options:(SDWebImageDownloaderOptions)options
             progress:(SDWebImageDownloaderProgressBlock)progressBlock
            completed:(SDWebImageDownloaderCompletedBlock)completedBlock
            cancelled:(SDWebImageNoParamsBlock)cancelBlock;

6.png 7.png 8.png

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部