iOS 开发之 SDWebImage 底层实现原理分析
SDWebImage 是一个比较流行的用于网络图片缓存的第三方类库。这个类库提供了一个支持缓存的图片下载器。为了方便操作者调用,它提供了很多 UI 组件的类别,例如:UIImageView、UIButton、等等。
使用方式很简单:
1、CocoaPods 安装:
platform :ios, '7.0'
pod 'SDWebImage', '~> 4.0'
2、直接把文件夹拖进工程目录:
在使用时只需要引入头文件,就可以使用相关 API 进行网路图片缓存了。例如:
[imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
工程目录如下:
SDWebImage
|—-SDWebImageCompat 处理不同平台(iOS、TV、OS、Watch)宏,以及根据文件名@2x、@3x进行图片处理和缩放
|—-SDWebImageOperation.h 添加cancel的delegate
+—-Cache
|——–SDImageCache 主要处理缓存逻辑,重点集中在:NSCache(Memory)、Disk读写、清理Old File
|——–SDImageCacheConfig 配置缓存参数:是否压缩、iCloud、InMemory、ReadingOption、时间和CacheSize
+—-Downloader
|——–SDWebImageDownloaderOperation 主要提供下载的Operation操作
|——–SDWebImageDownloader 提供下载管理入口
+—-Utils
|——–SDWebImageManager 提供外层管理cache和download入口
|——–SDWebImagePrefetcher 预处理获取Image,主要应用预加载的地方
+—-Categories
|——–NSData+ImageContentType 提供类型判断和ImageIO类型转换
|——–UIImage+GIF Data转UIImage(GIF)扩展
|——–UIImage+MultiFormat 提供BitMap或者未知类型的Data转UIImage扩展
|——–UIImage+WebP Data转WebP扩展
|——–UIImage+ForceDecode 解压操作
|——–UIView+WebCacheOperation 提供顶层关于取消和下载记录的扩展
+—-Decoder
|——–SDWebImageCodersManager 整体Coders的入口,提供是否可Coder和Coder转发
|——–SDWebImageCoder 主要说明Coder Delegate 需要实现的接口
|——–SDWebImageImageIOCoder PNG/JPEG的Encode和解压操作
|——–SDWebImageGIFCoder GIF的Coder操作
|——–SDWebImageWebPCoder WebP的Coder操作
|——–SDWebImageFrame 辅助类,主要在GIF等动态图使用
|——–SDWebImageCoderHelper 辅助类,包括方向、Gif图合成等
组件结构图(来自网络):

SDWebImage 工程架构UML图如下:


iOS 开发之 SDWebImage 底层实现原理分析的更多相关文章
- iOS开发之SDWebImage详解
介绍 github地址: https://github.com/rs/SDWebImage 简介 一个异步图片下载及缓存的库 特性: 一个扩展UIImageView分类的库,支持加载网络图片并缓存图片 ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 插件开发之360 DroidPlugin源码分析(五)Service预注册占坑
请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52264977 在了解系统的activity,service,broa ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
随机推荐
- java 中使用MD5加密 , 入库时对密码进行加密
import lombok.extern.slf4j.Slf4j; import java.security.MessageDigest; @Slf4j public class MD5Util { ...
- codeforces 1283F. DIY Garland(树+优先队列)
题目连接:https://codeforces.com/contest/1283/problem/F 题意:一根电线连接着两个点,这两个点分别代表着两个灯,灯有自己的编号i,其亮度是2 ^ i,每根电 ...
- Python爬取ithome的一所有新闻标题评论数及其他一些信息并存入Excel中。
# coding=utf-8 import numpy as np import pandas as pd import sys from selenium import webdriver impo ...
- 关于QImage和IplImage之间转换的实现
在嵌入式系统中实现qt和opencv的处理,最基础的就是QImage和IplImage之间的转换.这样两者就可以进行一起使用图像数据,从而达到利用qt显示和利用opencv处理的功能. 下面我将贴出代 ...
- CompletableFuture--给future调用增加回调或聚合操作
CompletableFuture--增大内存节省时间.整合多个future调用,来减少时间 例如:第一个future 返回时1s,第二个返回时2s,第三个返回是3s CompletableFut ...
- IMM设置静态ip,安装系统
IMM设置静态ip,安装系统 设置ip: System Setting->Integrated Management Module->Network configuration 修改后选择 ...
- leetcode 力扣第七题: 整数反转
哇,发现会写算法的人好牛逼啊,而且好像大多写算法的都不用PHP,哈哈哈哈哈,在领扣里面都没有php这个选项,真尴尬 从几个月之前就想刷题了,但是不会啊,很懵逼啊,昨天搜了一下答案,好像才打开了我这个写 ...
- 「hdu 4845 」拯救大兵瑞恩 [CTSC 1999](状态压缩bfs & 分层图思想)
首先关于分层图思想详见2004的这个论文 https://wenku.baidu.com/view/dc57f205cc175527072208ad.html 这道题可以用状态压缩,我们对于每一把钥匙 ...
- Apache Kafka(十一)Topic 的配置与组成
Topic 的配置与组成 之前我们仅主要介绍了Kafka Producer与Kafka Consumer 的相关配置,而未详细介绍过有关topic的配置.Topic的配置在Kafka 使用中也至关重要 ...
- window10配置远程虚拟机window7上的mysql5.7数据源
原文链接:http://www.xitongcheng.com/jiaocheng/win10_article_18644.html windows10系统用户想要在电脑中设置ODBC数据源,于是手动 ...