SDWebImage清理缓存处理

SDWebImage对图片的缓存分两种,一种是缓存到磁盘上,一种是缓存在内存中。在加载图片时,首先会从内存中寻找缓存图片,如果没有再从磁盘缓存中寻找,实在没有才会从网络请求图片。既然有缓存,那就免不了对缓存的清理,不然一直缓存不清理,会导致内存暴涨和磁盘空间的大量占用。

在使用SDWebImage加载图片的时候 其实已经初始化过SDImageCache单例了。在SDImageCache单例里添加了几个通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(clearMemory)
                                                     name:UIApplicationDidReceiveMemoryWarningNotification
                                                   object:nil];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(deleteOldFiles)
                                                     name:UIApplicationWillTerminateNotification
                                                   object:nil];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(backgroundDeleteOldFiles)
                                                     name:UIApplicationDidEnterBackgroundNotification
                                                   object:nil];

这三个通知分别是在app收到内存警告时清理缓存,在app将要退出时 删除旧的缓存文件,还有在app进入后台后,删除旧的缓存文件。也就是说,默认情况下SDWebImage已经为我们做了一些缓存的清理了。

疑问:但是我们如果一直让app处于活跃状态,但是又不想在收到内存警告后才释放缓存,想一直控制app占用内存在一个范围内怎么办呢?

SDImageCache提供了一个动态控制最大缓存图片像素数量的方法。像素和内存单位不同,下面我设置了最大像素为1000 * 1000 * 30 px 大概相当于几十兆的内存大小。这样我的app里缓存在内存中的的图片大小就会控制在几十兆的范围内。
[SDImageCache sharedImageCache].maxMemoryCost = 1000 * 1000 * 30;

设置磁盘缓存图片最大占用空间 单位字节

在app回到后台和收到内存警告开始清理图片缓存时,会将磁盘里超过该值的缓存图片清理掉。

下面我设置的为最大50M的缓存空间
[SDImageCache sharedImageCache].config.maxCacheSize = 1024 * 1024 * 50;

你可能感兴趣的:(SDWebImage清理缓存处理)