SDWebImage窥探

作者: 枫清慕怡 | 来源:发表于2016-06-23 14:13 被阅读88次

    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 代理方法,因为大多数转换代码会破坏动画文件,  使用此标记尝试转换
    

    清理图片缓存时的原理

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

    Mou icon

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

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

    相关文章

      网友评论

        本文标题:SDWebImage窥探

        本文链接:https://www.haomeiwen.com/subject/nqandttx.html