YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

SDWebImage(转)

SDWebImage(转)

  • 功能

    • 扩展UIImageView,UIButton,MKAnnotationView,增加网络图片与缓存管理
    • 一个异步的图片管理器
    • 一个 异步+磁盘 图片缓存,拥有自动的缓存过期处理机制
    • 支持后台图片解压缩处理
    • 确保同一个URL的图片不被下载多次
    • 确保虚假的URL不会被反复下载
    • 确保下载与缓存时,主线程不被阻塞
    • 使用GCD与ARC
  • 组织架构

    • SDWebImageDownloader负责维持图片的下载队列
    • SDWebImageDownloaderOperation负责真正的图片下载请求
    • SDImageCache负责图片的缓存
    • SDWebImageManager是总的管理类,维护了一个SDWebImageDownloader实例和一个SDImageCache实例,是下载与缓存的桥梁
    • SDWebImageDecoder负责图片的解压缩
    • SDWebImagePrefetcher负责图片的领取
    • UIImageView+WebCache和其他扩展都是与用户直接打交道
  • UIImageVIew + WebCache

    • 1
      2
      3
      4
      5
      6
      - (void)setImageWithURL:(NSURL *)url;
      - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
      - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options;
      - (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletedBlock)completedBlock;
      - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock;
      - (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock;
    • (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;```
      1
      2
      3
      4
      - SDWebImageManager
      -

      //操作完成的回调,被上层的扩展调用。
      typedef void(^SDWebImageCompletionBlock)(UIImage image, NSError error, SDImageCacheType cacheType, NSURL imageURL);
      //被SDWebImageManager调用。如果使用了SDWebImageProgressiveDownload标记,这个block可能会被重复调用,直到图片完全下载结束,finished=true,再最后调用一次这个block。
      typedef void(^SDWebImageCompletionWithFinishedBlock)(UIImage
      image, NSError error, SDImageCacheType cacheType, BOOL finished, NSURL imageURL);
      //SDWebImageManager每次把URL转换为cache key的时候调用,可以删除一些image URL中的动态部分。
      typedef NSString (^SDWebImageCacheKeyFilterBlock)(NSURL url);
      ```

SDWebImage加载gif图片


  • 在这个库里有一个UIImage+GIF的类别,里面为UIIMage扩展了3个方法
    • + (IImage *)sd_animatedGIFNamed:(NSString *)name;只需要传图片名字,不用传gif扩展名
    • + (UIImage *)sd_animatedGIFWithData:(NSData *)data;
    • - (UIImage *)sd_animatedImageByScalingAndCroppingToSize:(CGSize)size;