zoukankan      html  css  js  c++  java
  • SDWebImage第三方库学习

    1、基本使用方法

    //异步下载并缓存
    - (void)sd_setImageWithURL:(nullable NSURL *)url NS_REFINED_FOR_SWIFT;
    //使用占位图片,当下载完成后使用新下载的图片进行替换
    - (void)sd_setImageWithURL:(nullable NSURL *)url
              placeholderImage:(nullable UIImage *)placeholder NS_REFINED_FOR_SWIFT;
    //参数options表示下载图片时使用的选项常量,下面还会一一列举
    - (void)sd_setImageWithURL:(nullable NSURL *)url
              placeholderImage:(nullable UIImage *)placeholder
                       options:(SDWebImageOptions)options NS_REFINED_FOR_SWIFT;
    //操作完成后调用的块。其中typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL);包含四个参数,cacheType表示图片是从网络下载或本地缓存的
    - (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;
    //@param progressBlock 表示在图片在下载时调用的块
    - (void)sd_setImageWithURL:(nullable NSURL *)url
              placeholderImage:(nullable UIImage *)placeholder
                       options:(SDWebImageOptions)options
                      progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
                     completed:(nullable SDExternalCompletionBlock)completedBlock;
    
    - (void)sd_setImageWithPreviousCachedImageWithURL:(nullable NSURL *)url
                                     placeholderImage:(nullable UIImage *)placeholder
                                              options:(SDWebImageOptions)options
                                             progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
                                            completed:(nullable SDExternalCompletionBlock)completedBlock __deprecated_msg("This method is misunderstanding and deprecated, consider using `SDWebImageQueryDiskSync` options with `sd_setImageWithURL:` instead");

    2、 SDWebImageOptions 常量

    typedef NS_OPTIONS(NSUInteger, SDWebImageOptions ) {
        SDWebImageRetryFailed = 1 < < 0,
        SDWebImageLowPriority = 1 < < 1,
        SDWebImageCacheMemoryOnly = 1 < < 2,
        SDWebImageProgressiveDownload = 1 < < 3,
        SDWebImageRefreshCached = 1 < < 4,
        SDWebImageContinueInBackground = 1 < < 5,
        SDWebImageHandleCookies = 1 < < 6,
        SDWebImageAllowInvalidSSLCertificates = 1 < < 7,
        SDWebImageHighPriority = 1 < < 8,
        SDWebImageDelayPlaceholder = 1 < < 9,
        SDWebImageTransformAnimatedImage = 1 < < 10,
        SDWebImageAvoidAutoSetImage = 1 < < 11,
        SDWebImageScaleDownLargeImages = 1 < < 12,
    };
    • SDWebImageRetryFailed
      默认情况下,当一个url下载失败,会尝试重新下载,如果URL在黑名单中那么SDWebImage库不进行重试。这个标志使黑名单失效。

    • SDWebImageLowPriority
      默认情况下,在UI交互中开始图片下载,这个标志使这个特性失效,例如导致在UIScrollView减速中延迟下载。

    • SDWebImageCacheMemoryOnly
      此标志在下载完成后禁用磁盘上缓存,仅在内存中缓存。

    • SDWebImageProgressiveDownload
      这个标志表示可以逐步下载图片,在下载过程中,网页能够逐步的显示图片。默认情况下,图片只在下载完成后一次性显示。

    • SDWebImageRefreshCached
      虽然图片已经被缓存了,但是HTTP响应的缓存控制比较重要,如果需要则从远程地址刷新图片。硬盘缓存将用SDWebImage代替NSURLCache,会导致轻微的性能下降。这个项目帮助处理相同的请求URL而图片已经改变的情况,比如Facebook图形api的概要图片。如果一个缓存的图片被刷新,完成块会被缓存图片调用一次,再被最终的图片调用一次。

    • SDWebImageContinueInBackground
      在iOS 4+,当app切换到后台继续下载图片。这是通过向系统请求额外的时间来完成,在后台情况下让请求完成。如果后台任务时间过期那么操作将会被取消。

    • SDWebImageHandleCookies
      通过设置NSMutableURLRequest来操作cookies保存到NSHTTPCookieStore。 HTTPShouldHandlerCookies = YES。

    • SDWebImageAllowInvalidSSLCertificates
      允许使用不信任的SSL证书。测试目的是有效的。在生产环境被警告。

    • SDWebImageHighPriority
      默认情况下,图片在队列中排队下载。这个标志移动他们到前面的队列中。

    • SDWebImageDelayPlaceholder
      默认情况下,当图片在加载中默认图片被加载。这个标志将延迟默认图片的显示,直到图片完成加载。

    • SDWebImageTransformAnimatedImage
      我们通常在动画图片中不调用transformDownloadedImage代理,大部分的变形代码将损坏图片。使用这个标志在任何情况下变形图片。

    • SDWebImageAvoidAutoSetImage
      默认情况下,图片是在下载完成后加载到图片视图。但是在一些情况下,我们想要在设置图片之前进行图片处理(比如,提供一个过滤或添加一个折叠动画)。使用这个标志,如果你想在下载成功后在完成块中手动设置图片。

    • SDWebImageScaleDownLargeImages
      默认情况下,图片解码为原始的大小。在iOS,这个标志会把图片缩小到与设备的受限内容相兼容的大小。如果设置了SDWebImageProgressDownload标志,那么缩小被设置为无效。

    3、主要管理类

    SDImageCache 提供图片缓存
    SDWebImageCoder 对网络中下载的图片进行解码操作
    SDWebImageDownloader 异步下载图片

    4、UIKit层和工具层

      在进行网络下载图片时都是通过UIImageView+WebCache类中提供的基础方法,但是所有的最终走向UIView+WebCache以下方法中:

    - (void)sd_internalSetImageWithURL:(nullable NSURL *)url
                      placeholderImage:(nullable UIImage *)placeholder
                               options:(SDWebImageOptions)options
                          operationKey:(nullable NSString *)operationKey
                         setImageBlock:(nullable SDSetImageBlock)setImageBlock
                              progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
                             completed:(nullable SDExternalCompletionBlock)completedBlock;
    如果好奇UIImageView+WebCache类中的方法还要走向上一层UIView+WebCache类中,那是因为SDWebImage框架还支持对UIButton的图片下载。
      SDWebImageManager同时管理SDImageCache和SDWebImageDownloader两个类,在下载任务开始的时候,SDWebImageManager首先访问SDImageCache来查询是否存在缓存,如果有缓存,直接返回缓存的图片。如果没有缓存,就命令SDWebImageDownloader来下载图片,下载成功后,存入缓存。
      下载方法只有一个 :
       [SDWebImageManager.sharedManager loadImageWithURL:options:progress:completed:]
       loadImageWithURL 中 会有 [self.imageCache queryCacheOperationForKey] 的操作 查询是否有缓存图片(SDImageCache中是基于 NSCache来实现的 通过key(url)来获取 缓存) * 如果不存在缓存 就开启下载器 在错误url名单中添加当前的url 到 failedURLs 中, 如果标记失败后可以重新下载 就把这个失败的url 在 failedURLs中移除
      下载成功就进行缓存 : self.imageCache 调用 - (void)storeImage:(nullable UIImage*)image imageData:(nullable NSData*)imageData forKey:(nullable NSString*)key toDisk:(BOOL)toDisk completion:(nullable SDWebImageNoParamsBlock)completionBlock 

  • 相关阅读:
    MySQL-percona安装
    Oracle-19C PSU升级
    Oracle-内存管理机制
    学习进度第十二周
    十天冲刺10
    单词统计续
    十天冲刺9
    学习进度第十一周
    十天冲刺8
    十天冲刺7
  • 原文地址:https://www.cnblogs.com/xjf125/p/10214337.html
Copyright © 2011-2022 走看看