zoukankan      html  css  js  c++  java
  • SDWebImage

    下载过程:

    SDWebImageManager:从缓存加载图片(缓存包括内存缓存和磁盘缓存)

    SDImageCache:从缓存加载图片用到的一个类,所有的缓存操作都是它来执行的

    如果缓存中没有图片,在它的回调函数里去创建 SDWebImageDownloader,它并没有真正的去执行下载操作,只是去设置下载操作,比如说超时多长时间就不下载了、还有一些请求操作,真正的下载操作是SDWebImageDownloader去调用SDWebImageDownloaderOperation

    clearDisk (NSCache)清空磁盘缓存,将所有缓存目录中的文件,全部删除! 实际工作,将缓存目录直接删除,再次创建一个同名空目录!

    cleanDisk (接收到应用程序将要终止通知)清理磁盘缓存策略

    cleanDisk执行过程:

    获取磁盘路径URL,根据路径获取资源(存入NSArray)

    定义一个可变字典,记录所有缓存文件

    定义一个可变数组,遍历资源,将过期文件记录到可变数组里边,累加文件的总大小,然后遍历过期文件数组删除过期文件

    如果剩余磁盘缓存空间超出最大限额,再次执行清理操作,删除最早的文件 循环依次删除文件,直到低于期望的缓存限额,SDWebimage里边的期望限额为最大限额的一半

    内存缓存是使用NSCache实现的,最大内存缓存值以像素为单位

    最大磁盘缓存是以字节为单位,最大磁盘缓存的时间默认为1周

    下载操作的最大并发数默认为6

    下载操作的超时时长最长默认为15秒

    SDWebImage是如何区分不同格式的图像的(精确判断文件类型):

    #import "NSData+ImageContentType.h"

    拿到文件的二进制数据,取出第一个字节和switch里的分支比较来判断

    PNG:压缩比没有JPG高,但是无损压缩,解压缩性能高,苹果推荐的图像格式!

    JPG:压缩比最高的一种图片格式,有损压缩!最多使用的场景,照相机!解压缩的性能不好!

    GIF:序列桢动图,特点:只支持256种颜色!最流行的时候在1998~1999,有专利的!

    SDWebImage缓存图片的名称是用URL的md5加密后生成的32位字符串作为文件名的

    利用通知中心观察,能够保证缓存文件的大小始终在控制范围之内!

    - UIApplicationDidReceiveMemoryWarningNotification 接收到内存警告的通知

    执行 clearMemory 方法,清理内存缓存!

    - UIApplicationWillTerminateNotification 接收到应用程序将要终止通知

    执行 cleanDisk 方法,清理磁盘缓存!

    - UIApplicationDidEnterBackgroundNotification 接收到应用程序进入后台通知

    执行 backgroundCleanDisk 方法,后台清理磁盘!

    内存缓存: 使用NSCahce对象实现

    磁盘缓存: 使用 NSFileManager 存储在 Cache 目录中

    SDImageCache提供了大量方法来缓存、获取、移除及清空图片。为了方便地在内存或磁盘中对它进行这些操作,

    我们需要为每个图片设置一个key来索引它。在内存中将其作为NSCache的key值,在磁盘中用这key的md5作为图片的文件名。

    在SDWebImage 中使用图片的 url 最为 key (md5)

  • 相关阅读:
    最大上升子序列
    vue的keep-alive组件
    对小程序的研究3
    对getBoundingClientRect属性的研究
    消除浮动的方式
    对微信小程序的研究2
    对小程序的研究1
    对props的研究
    对provide/inject的研究
    对calc()的研究
  • 原文地址:https://www.cnblogs.com/sunshineandsand/p/4604974.html
Copyright © 2011-2022 走看看