SDWebImage底层解析
0.SDWebImage内部结构图:

1.框架底层用NSOperationQueue和GCD混合开启线程。
2.框架底层清空缓存:clear清除缓存,是清除目录下所有文件,创建空的文件夹;clean是清除过期的缓存,清除超出最大缓存数额的缓存,过期时间为7天。
- (void)clearDisk;
- (void)cleanDisk;
- (void)clearMemory;
3.取消所有操作:
[[SDWebImageManager sharedManager] cancelAll];
4.框架底层缓存文件的名称是如何保存的:
把图片的URL进行MD5加密,得出字符串就是名称。
5.框架底层对内存警告的处理:
监听通知的方式来响应处理缓存。
6.框架底层缓存处理方式:
NSCache
7.框架底层判断图片类型:
匹配第一个字节
8.框架底层队列中任务的处理方式:
SDWebImageDownloaderFIFOExecutionOrder 先进先出
9.框架底层如何下载图片的:
不是[NSData dataWithContentsOfURL:],而是
发送网络请求来下载图片,内部使用NSURLConnection
10.框架底层默认请求超时时间:
15s
11.框架底层的原理实现机制:
简单版本:
11.1.显示占位图片。
11.2.查看缓存中是否已有图片,如果有展示。如果没有,下一步。
11.3.查看磁盘缓存中是否已有图片,如果有展示,然后添加到内存缓存。如果没有,下一步。
11.4.创建新的下载任务,开始下载,下载完成展示图片,进行内存缓存与磁盘缓存。
复杂版本:



12.框架底层如何解决了tableView卡顿问题:
12.1.设置最大并发数
12.2.只下载当前页cell图片,而非全部下载
12.3.数据的三级缓存(内存,沙盒)
12.4.降低网络请求次数