SDWebImage源码解读 一(基础用法)

SDWebImage是我们常用的异步图片加载库,有的小伙伴说,感觉源码读起来太费劲了,所以我们重头好好学习一下我们经常用的这个三方库。

一上来就说结构什么的容易把小白干懵逼,所以,我们先从用法开始读:

对UIImageView的网络图片操作

  1. - (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;


    最简单的方法,也是大家都知道怎么用的,异步下载图片,并且缓存它。

  2. - (void)sd_setImageWithURL:(nullable NSURL *)url placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;


    也是经常用到的,一张图片用于预设图,然后在去用url去异步下载图片,并且缓存它。

  3. - (void)sd_setImageWithURL:(nullable NSURL *)url  placeholderImage:(nullable UIImage *)placeholder options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;


    这个方法对于刚开始开发的小伙伴用的应该就不是特别多了,前两个参数,url和预设图没什么问题,但是第三个参数options代表了什么呢?
    options这个参数是图片在下再过程中的设置情况,默认是0,也就是SDWebImageRetryFailed,代表着如果这个url下载图片失败了,那么将这个url拉入黑名单中,当第二次遇到这个url的时候,直接不进行下载。其他的枚举值将在文章底部详细解答。

  4. - (void)sd_setImageWithURL:(nullable NSURL *)url  completed:(nullable SDExternalCompletionBlock)completedBlock;

    这个方法想必大家用的也比较多了吧,就是普通的加载图片,在下载结束后(包括成功和失败)给出一个回调的block:SDExternalCompletionBlock,这个block大家应该也很清楚了。不过不影响我多啰嗦几句:

    typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL); 

     第一个参数,image为下载的图片
    第二个参数,error,就是错误信息
    第三个参数,一个枚举值,代表图片是从服务端获取、磁盘中获取或者是内存中获取
    第四个参数,图片的url地址

  5. - (void)sd_setImageWithURL:(nullable NSURL *)url   placeholderImage:(nullable UIImage *)placeholder   completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;

    有了上面的解释,这个就很好理解了吧,有预设图和回调值的方法

  6. - (void)sd_setImageWithURL:(nullable NSURL *)url   placeholderImage:(nullable UIImage *)placeholder   options:(SDWebImageOptions)options     completed:(nullable SDExternalCompletionBlock)completedBlock;

    这个方法中的参数也已经解释过了

  7. - (void)sd_setImageWithURL:(nullable NSURL *)url   
              placeholderImage:(nullable UIImage *)placeholder 
                       options:(SDWebImageOptions)options      
                      progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock  
                     completed:(nullable SDExternalCompletionBlock)completedBlock;

    这个方法中添加了SDWebImageDownloaderProgressBlock这个block,接下来我们看下这个block

    typedef void(^SDWebImageDownloaderProgressBlock)(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL);  

    第一个参数:receivedSize图片已经下载的大小
    第二个参数:expectedSize预计图片大小
    第三个参数:下载地址

  8. - (void)sd_setAnimationImagesWithURLs:(nonnull NSArray<NSURL *> *)arrayOfURLs;

    传入一个元素为图片url的数组,然后循环播放这一组图片

  9. - (void)sd_cancelCurrentAnimationImagesLoad;

    和8为一组,对改数组停止播放

对UIButton的网络图片操作

  • /**
     * 获取当前图像的URL。
     */
    - (nullable NSURL *)sd_currentImageURL;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
              placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
              placeholderImage:(nullable UIImage *)placeholder
    
                       options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
                     completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
              placeholderImage:(nullable UIImage *)placeholder
    
                     completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
              placeholderImage:(nullable UIImage *)placeholder
    
                       options:(SDWebImageOptions)options
    
                     completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_setImageWithURL:(nullable NSURL *)url
    
              placeholderImage:(nullable UIImage *)placeholder
    
                       options:(SDWebImageOptions)options
    
                      progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
    
                     completed:(nullable SDExternalCompletionBlock)completedBlock;

     

  • PS:2---8没有说明,因为和这些方法和UIImageView的用法完全相同

UButton的Alternate Image

  • - (nullable NSURL *)sd_currentAlternateImageURL;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                       placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                       placeholderImage:(nullable UIImage *)placeholder
    
                                options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                              completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                       placeholderImage:(nullable UIImage *)placeholder
    
                              completed:(nullable SDExternalCompletionBlock)completedBlock NS_REFINED_FOR_SWIFT;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                       placeholderImage:(nullable UIImage *)placeholder
    
                                options:(SDWebImageOptions)options
    
                              completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_setAlternateImageWithURL:(nullable NSURL *)url
    
                       placeholderImage:(nullable UIImage *)placeholder
    
                                options:(SDWebImageOptions)options
    
                               progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
    
                              completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_cancelCurrentImageLoad;
    
    - (void)sd_cancelCurrentAlternateImageLoad;

     

对枚举值SDWebImageOptions的说明

  • SDWebImageRetryFailed = 1 << 0,
    默认情况下,当URL下载失败时,该URL被列入黑名单,因此该库将不会继续尝试。
  • SDWebImageLowPriority = 1 << 1,
    默认情况下,图片下载是在用户界面交互过程中开始的,此标志会禁用此功能,
    例如,导致UIScrollView减速下载延迟。
  • SDWebImageCacheMemoryOnly = 1 << 2,
    下载完成后,此标志禁用磁盘缓存,仅缓存在内存中
  • SDWebImageProgressiveDownload = 1 << 3,
    该标志启用渐进式下载,在下载过程中图像会像浏览器一样逐步显示。
    默认情况下,仅在完全下载后才显示图像。
  • SDWebImageRefreshCached = 1 << 4,
    即使已缓存映像,也请遵守HTTP响应缓存控件,并在需要时从远程位置刷新映像。
    磁盘缓存将由NSURLCache而不是SDWebImage处理,从而导致性能略有下降。
    此选项有助于处理在相同请求网址后更改的图像,例如 Facebook图形API个人资料图片。
    如果刷新了缓存的图像,则对缓存的图像调用一次完成块,然后对最终图像调用一次。
    仅当无法使用嵌入式缓存清除参数将URL设为静态时,才使用此标志。
  • SDWebImageContinueInBackground = 1 << 5,
    在iOS 4以上版本中,如果应用程序进入后台运行,则继续下载图像。 这是通过要求系统提供
    在后台增加时间以使请求完成。 如果后台任务到期,则该操作将被取消。
  • SDWebImageHandleCookies = 1 << 6,
    通过设置处理存储在NSHTTPCookieStore中的cookie
     NSMutableURLRequest.HTTPShouldHandleCookies = YES;
  • SDWebImageAllowInvalidSSLCertificates = 1 << 7,
    启用以允许不受信任的SSL证书。
    用于测试目的。 在生产中请谨慎使用。
  • SDWebImageHighPriority = 1 << 8,
    默认情况下,图像按排队顺序加载。 此标志将它们移至
    队列的最前面。
  • SDWebImageDelayPlaceholder = 1 << 9,
    默认情况下,占位符图像在加载图像时加载。 该标志将延迟加载
    占位符图像的*,直到图像加载完成为止。
  • SDWebImageTransformAnimatedImage = 1 << 10,
  • 我们通常不对动画图像调用transformDownloadedImage委托方法,
  • 因为大多数转换代码都会破坏它。
  • 始终使用此标志对其进行转换。
  • SDWebImageAvoidAutoSetImage = 1 << 11,
    默认情况下,下载后将图像添加到imageView中。 但是在某些情况下,我们想
    *在设置图像之前先伸出援手(例如,应用滤镜或将其添加为淡入淡出动画)
    *如果要在成功时手动设置图像完成,请使用此标志
  • SDWebImageScaleDownLargeImages = 1 << 12,
    默认情况下,图像会按照原始尺寸进行解码。 在iOS上,此标志将按比例缩小
    *图像大小应与设备的受限内存兼容。
    *如果设置了“ SDWebImageProgressiveDownload”标志,则缩小比例无效。
  • SDWebImageQueryDataWhenInMemory = 1 << 13,
    默认情况下,当映像缓存在内存中时,我们不查询磁盘数据。 此掩码可以强制同时查询磁盘数据。
    *建议与SDWebImageQueryDiskSync一起使用此标志,以确保将映像加载到同一运行循环中。
  • SDWebImageQueryDiskSync = 1 << 14,
    默认情况下,我们同步查询内存缓存,异步查询磁盘缓存。 此掩码可以强制同步查询磁盘缓存,以确保将映像加载到同一运行循环中。
     *如果禁用内存缓存或在其他情况下,此标志可以避免在单元重用期间闪烁。     
  • SDWebImageFromCacheOnly = 1 << 15,
    默认情况下,当缺少缓存时,将从网络下载映像。 该标志可以防止网络仅从缓存加载。
  • SDWebImageForceTransition = 1 << 16
    默认情况下,当您使用“ SDWebImageTransition”在图像加载完成后进行某些视图转换时,此转换仅适用于从网络下载图像。 此掩码也可以强制将视图转换应用于内存和磁盘缓存。

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值