SDWebImage窥探

SDWebImage

SDWebImage是一款图片下载缓存框架,添加到工程中不会有烦人的警告
原理:SDWebImageManager是由一个SDWebImageDownloader(负责下载网络图片)和SDImageCache(一个处理缓存的类)共同构成的类
SDWebImage提供了两种category来进行缓存。
UIButton+WebCache 给按钮设置图片
UIImageView+WebCache 给imageView设置缓存

UIImageView + WebCache分类中有一个重要的方法
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage   *)placeholder options:(SDWebImageOptions)options progress:  (SDWebImageDownloaderProgressBlock)progressBlock completed: (SDWebImageCompletionBlock)completedBlock;

options是SDWebImageOptions类型的枚举类型,里面有10个选项,下面一一进行介绍

SDWebImageRetryFailed = 1 << 0,      默认情况下,当一个 URL 下载失败,会将该 URL 放在黑名单中,不再尝试下载,当使用这个标记时就会 ,取消黑名单意思是即使下载失败也不会被加入黑名单
SDWebImageLowPriority = 1 << 1,      默认情况下,在 UI 交互时也会启动图像下载, 当时用这个标记时, 用户拖动tableView时不会进行图片的下载,当没有交互时才会下载
SDWebImageCacheMemoryOnly = 1 << 2,   此标记取消磁盘缓存,仅做内存缓存 
SDWebImageProgressiveDownload = 1 << 3, 默认情况下,图像会在下载完成后一次性显示,  此标记允许渐进式下载,就像浏览器中那样,下载过程中,图像会逐步显示出来
SDWebImageRefreshCached = 1 << 4,      磁盘缓存将由 NSURLCache 处理,而不是 SDWebImage,这会对性能有轻微的影响, 此选项有助于处理同一个请求 URL 的图像发生变化,  如果缓存的图像被刷新,会调用一次 completion block,并传递最终的图像,  仅在无法使用嵌入式缓存清理参数确定图像 URL 时,使用此标记
SDWebImageContinueInBackground = 1 << 5,  在 iOS 4+,当 App 进入后台后仍然会继续下载图像。这是向系统请求额外的后台时间以保证下载请求完成的, 如果后台任务过期,请求将会被取消
SDWebImageHandleCookies = 1 << 6,      处理保存在 NSHTTPCookieStore 中的 cookies
SDWebImageAllowInvalidSSLCertificates = 1 << 7,  允许不信任的 SSL 证书,  可以出于测试目的使用,在正式产品中慎用
SDWebImageHighPriority = 1 << 8,      默认情况下,图像会按照在队列中的顺序被加载,此标记会将它们移动到队列前部立即被加载,  而不是等待当前队列被加载,等待队列加载会需要一段时间
SDWebImageDelayPlaceholder = 1 << 9,    默认情况下,在加载图像时,占位图像已经会被加载。而此标记会延迟加载占位图像,直到图像已经完成加载
SDWebImageTransformAnimatedImage = 1 << 10,  通常不会在可动画的图像上调用 transformDownloadedImage 代理方法,因为大多数转换代码会破坏动画文件,  使用此标记尝试转换

清理图片缓存时的原理

当程序收到内存警告的时候就会调用下面的方法

SDWebImage窥探_第1张图片
Mou icon

SDWebImage在cleanMemary(清除缓存)时的运行原理

  • 遍历缓存目录,删除所有过期图片
  • 统计没有过期的图片的总大小
  • 判断没有过期的图片的总大小是否超过了最大的缓存大小
  • 如果过期图片超过缓存总大小就会继续删除没有过期的图片,从大到小的删除

你可能感兴趣的:(SDWebImage窥探)