SDWebImage
SDWebImage是一款图片下载缓存框架,添加到工程中不会有烦人的警告
原理:SDWebImageManager是由一个SDWebImageDownloader(负责下载网络图片)和SDImageCache(一个处理缓存的类)共同构成的类
SDWebImage提供了两种category来进行缓存。
UIButton+WebCache 给按钮设置图片
UIImageView+WebCache 给imageView设置缓存<br />
UIImageView + WebCache分类中有一个重要的方法<br />
- (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在cleanMemary(清除缓存)时的运行原理
- 遍历缓存目录,删除所有过期图片
- 统计没有过期的图片的总大小
- 判断没有过期的图片的总大小是否超过了最大的缓存大小
- 如果过期图片超过缓存总大小就会继续删除没有过期的图片,从大到小的删除
网友评论