SDWebImage原理

1,从内存中(字典)找图片(当这个图片在本次程序中加载过),找到直接使用。
2,从沙盒中找,找到直接使用,缓存到内存。
3,从网络上获取,使用,缓存到内存,缓存到沙盒。

SDWebImage中为UIView提供了一个分类叫做 WebCache,这个分类同时提供了很多类似的方法,这些最终会调用一个同时具有optionProgressBlock completionBlock的方法,而这个类最终被调用的方法会首先检查是否传入了placeholderImage以及对应的参数,并设置placeholderImage。

然后,会获取SDWebImageManager中的单例调用一个downloadImageWithURL:的方法获取图片,而这个manager获取图片的过程大体上分为两部分,它首先会在SDWebImageCache中寻找图片是否有对应的缓存,它会以URL作为数据的索引先在内存中寻找是否有对应的缓存,如果缓存未命中就会在磁盘中利用MD5处理过的Key来继续查询对应的数据,如果找到了,就会把磁盘中的缓存备份到内存中。

然而,假设我们在内存和磁盘缓存中都没有命中,那么manager就会调用它特有的一个SDWebImageDownloader对象的方法downloadImageWithURL:来下载图片,这个方法会在执行的过程中调用另一个方法addProgressCallback:andCompletedBlock:forURL:createCallback:来存储下载过程中和下载完成的回调,当回调块是第一次添加的时候,方法会实例化一个NSMutableURLRequest和SDWebImageDownloaderOperation,并将后者加入Downloader持有的下载队列开始图片的异步下载。而在图片下载完成之后,就会在主线程设置image属性,完成整个图像的异步下载和配置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言SDWebImage是一个很受欢迎的图片缓存第三方库,使用十分方便,只需一行代码就可以实现设置占位图以及在网络...
    一剑孤城阅读 14,154评论 1 16
  • 日常开发中,经常需要下载网络图片,最常用到的第三方库莫过于SDWebImage了,github托管地址https:...
    CALayer_Sai阅读 2,773评论 0 3
  • 调用类别的方法: 从内存中(字典)找图片(当这个图片在本次程序加载过),找到直接使用; 从沙盒中找,找到直接使用,...
    iOS_Alex阅读 1,638评论 0 0
  • 1、从内存中(字典)找图片(当这个图片在本次程序加载过),找到直接使用; 2、从沙盒中找,找到直接使用,缓存到内存...
    niceSYT阅读 2,784评论 0 1
  • 今夜我将所有孤独 尽赋于诗上 可是朋友啊 我已看不见了麦田
    史牧阅读 773评论 0 1