面试题答案
一键面试基本原理
- 内存缓存优先:首先从内存缓存中查找图片,如果找到则直接返回图片,避免重复下载。
- 磁盘缓存其次:若内存缓存中未命中,则从磁盘缓存中查找。磁盘缓存存储了之前下载过的图片,减少网络请求次数。
- 网络加载:若内存和磁盘缓存都未找到图片,则发起网络请求下载图片。在下载过程中,会使用
NSURLSession
进行异步请求,不会阻塞主线程。下载完成后,将图片存储到内存缓存和磁盘缓存中,并在主线程更新UI显示图片。
主要类及职责
SDWebImageManager
:- 是SDWebImage的核心类,负责协调图片加载的整个流程。
- 管理内存缓存和磁盘缓存,处理图片的加载、缓存和获取操作。
- 持有
SDImageCache
和SDWebImageDownloader
的实例,通过它们实现缓存和下载功能。
SDImageCache
:- 负责管理图片的缓存,包括内存缓存和磁盘缓存。
- 使用
NSCache
实现内存缓存,NSCache
会自动根据系统内存情况释放缓存对象。 - 使用文件系统实现磁盘缓存,将图片以文件形式存储在磁盘上,提供了缓存的持久化。
SDWebImageDownloader
:- 负责处理图片的网络下载任务。
- 使用
NSURLSession
进行异步网络请求,支持HTTP和HTTPS协议。 - 可以对下载任务进行管理,如暂停、取消等操作。
UIImageView+WebCache
:- 这是
UIImageView
的一个类别(Category),为UIImageView
添加了异步加载图片的功能。 - 提供了方便的接口,如
sd_setImageWithURL:
等方法,让开发者可以轻松地为UIImageView
设置远程图片,内部会调用SDWebImageManager
来完成图片的加载和显示。
- 这是