一、SDWebImage的缓存处理 1.SDWebImage的常见面试题,我们知道SDWebImage既可以做内存缓存,又可以做磁盘缓存,当做内存缓存的时候,用的是NSCache, SDWebImage在做磁盘缓存的时候,处理的比我们复杂,复杂在哪儿呢,复杂在它会设置磁盘缓存的缓存时间,缓存时间默认是一周的时间,是一个星期的时间,它会自动的把一个星期以前的图片给删除掉, 好,这件事情怎么实现的,我们可以通过源代码来看一下,源代码的话,看谁,打开,源代码的话,那么多类,不知道看哪个类,那我们先扫一眼,把这个SDWebImage这个项目打开, 项目打开之后,这里边是分成了四个文件夹, 1)SDWebImage 2)WebImage 3)Frameworks 4)Products 我们打开SDWebImage这个文件夹, 打开之后,又分成了四个文件夹, 1)Downloader 2)Cache 3)Utils 4)Categories 我们要看跟缓存相关的技术点的,我们看哪个文件夹,对,Cache,打开这个文件夹,里边的东西很简单,就一个类,SDImageCache, 把它的SDImageCache.h文件点开,看一下, 打开之后,这里边写了一些枚举啊,这些枚举我们曾经见过, 1)SDImageCacheTypeNone, 2)SDImageCacheTypeDisk, 3)SDImageCacheTypeMemory, 就是设置当前下载这些图片,是否缓存了,缓存到哪儿了,磁盘上还是内存里边来,再往下看, 这是这个类,这个类继承自NSObject,再往下看, 定义了好多好多属性啊, 1)shouldDecompressImages:是否要压缩图片, 2)shouldDisableiCloud:是否要禁用iCloud, 3)shouldCacheImagesInMemory:是否要缓存在内存中, 4)maxMemoryCost:最大的成本,看上边的注释,The maximum “total cost” of the in-memory image cache.The cost function is the number of pixels held in memory. total cost:就是最大的内存缓存的成本,就是缓存成本,就是设置NSCache,使用的这个缓存成本, 5)maxMemoryCountLimit:最大缓存的个数,