SDWebImage框架的简介与快速使用

SDWebImage框架来源  https://github.com/rs/SDWebImage

SDWebImage API文档 http://hackemist.com/SDWebImage/doc

UIImageView的类目,支持异步图片下载,支持缓存机制

这个库给UIImageView提供类目,支持远程下载图片(从网络上)

SDWebImage提供的功能:

  • 一个UIImageView的类目,给 Cocoa Touch 框架添加了异步下载远程图片以及管理图片缓存的功能
  • 一个图片的异步下载器
  • 一个内存 + 磁盘的缓存机制,并自动管理
  • gif动画支持
  • WebP格式支持
  • 后台解压图片
  • 确保同样地 URL 不会重复的下载多次
  • 确保无效的 URL 不会重复的链接
  • 确保主线程永远不会阻塞
  • 效果拔群!
  • 使用GCD以及要求ARC
  • 支持64位系统


SDWebImage的各个类的简介

  • 图片下载以及下载管理器
SDWebImageDownloader
SDWebImageDownloaderOperation
  • 管理以及操作
SDWebImageManager
SDWebImageOperation
  • 是SDWebImage包的一部分
SDImageCache:缓存相关
SDWebImageCompat:组件相关
SDWebImageDecoder:解码相关
  • MKAnnotationView地图的注解View缓存
MKAnnotationView+WebCache
  • 判断NSData是否什么类型的图片(例如:jpg,png,gif)
NSData+ImageContentType
  • UIButton类目
UIButton+WebCache
  • gif类目
UIImage+GIF
  • 图片其他类目
UIImage+MultiFormat
UIImage+WebP
UIImageView+WebCache


SDWebImage快速使用

  • UIImageView+WebCache:为UIImageView加载图片

直接加载图片,然后交给UIImageView,无缓存
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]];</span>

加载图片,异步下载到缓存管理,一切都会为你处理。
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]                               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];</span>


使用block,可以监听到完成时是成功还是失败
<span style="font-family:FangSong_GB2312;font-size:14px;">[imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]
                      completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... 下载完成后的代码 ...}];</span>

  • SDWebImageDownloader:独立的下载图片的功能(没有缓存机制)

<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *oneImageURL = @"http://wallpapers.wallbase.cc/rozne/wallpaper-573934.jpg";
    
    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:oneImageURL]
                                                          options:0
     
     progress:^(NSInteger receivedSize, NSInteger expectedSize)
     {
         //此处为下载进度
     }
     completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
     {
         //下载完成后进入这里执行
     }];</span>

  • SDWebImageManager:独立的下载图片的功能(有缓存机制)

<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *oneImageURL =
    @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
    
    [[SDWebImageManager sharedManager] downloadWithURL:[NSURL URLWithString:oneImageURL]
                                               options:0
     
    progress:^(NSInteger receivedSize, NSInteger expectedSize)
    {
        //此处为下载进度
    }
    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
    {
        //下载完成后进入这里执行
    }];</span>

  • 清除缓存文件

<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] clearDisk];</span>

  • 判断本地缓存中是否存在网络中的图片

<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
 [[SDImageCache sharedImageCache] diskImageExistsWithKey:imageNetURL];</span>

  • 获取缓存图片张数

<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] getDiskCount];</span>

  • 获取所有缓存图片的总大小

<span style="font-family:FangSong_GB2312;font-size:14px;">[[SDImageCache sharedImageCache] getSize];</span>

  • 直接从缓存中提取图片

<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
[[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imageNetURL];</span>

  • 直接删除缓存中得图片

<span style="font-family:FangSong_GB2312;font-size:14px;">NSString *imageNetURL = @"http://pic.cnitblog.com/avatar/607542/20140226182241.png";
 [[SDImageCache sharedImageCache] removeImageForKey:imageNetURL];</span>



独立的异步图片缓存

SDWebImage支持异步的图片下载+缓存

1 入口setImageWithURL:placeholderImage:option 先把placeholderImage显示后,

然后SDWebImageManage根据URL开始处理图片

进入SDWebImageManager--downloadWithURL:delegate:options:userinfo

交给SDImageCache从缓存查找图片是否已下载

queryDiskCacheForKey:delegate:userinfo

先从内存图片查找是否有图片, 如果内存中已经有图片存,

imageCach:didFindImage:forKey:userInfo

如果内存中没有,生成NSInvocationOperation 到开始从硬盘查找图片图片是否已 存

根据URLKey 在硬盘存目录下尝试读取图片,这是NSOperation操作,notifyDelegate

imageCache:didNotFindImageForKey:userinfo

共享或重新生成一个下载器SDWebImageDownloader开始下载图片。

下载由NSURLConnection 来做,实现相关delegate 来判断图片下载中。

connection:didReceiveData:中利用IMageIO做了按图片下载进度加载效果。

connection:didFinishLoading 数据下载完成后交给SDWebImageDecoder做

图片解码处理

NSOperationQueue完成,不会拖慢主线程UI,

notifyDelegateOnMainThreadWithInfo宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo

image

保存到SDImageCache中, 内存存和硬盘缓存同时保存。

NSInvocationOperation完成。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值