通常咱们项目中的缓存通常分为2大块:一个是本身缓存的一些数据;还有一个就是咱们使用的SDWebImage这个第三方库给咱们自动缓存的图片文件缓存了.html
实际项目中会配合设置里去清理缓存, 效果截图以下:缓存
一、仅仅清理图片缓存网络
二、清理全部缓存文件框架
一、仅仅清理图片缓存异步
若是你只想清理图片缓存,且是用SDWebImage加载的网络图片,那么你能够用SDWebImage内部封装方法清除图片缓存.async
导入头文件:工具
#import <SDImageCache.h>
获取缓存图片大小并异步清除图片缓存:spa
//获取缓存图片的大小(字节) NSUInteger bytesCache = [[SDImageCache sharedImageCache] getSize]; //换算成 MB (注意iOS中的字节之间的换算是1000不是1024) float MBCache = bytesCache/1000/1000; //异步清除图片缓存 (磁盘中的) dispatch_async(dispatch_get_global_queue(0, 0), ^{ [[SDImageCache sharedImageCache] clearDisk]; });
二、清理全部缓存文件视频
若是你想清理全部的缓存文件(包括图片、视频、音频等), 那你能够用以下方法。须要你把caches的路径传过去,而后计算caches文件夹下内容的大小,而后根据其大小再判断是否清除缓存。(根据路径删除文件或文件夹)htm
为了让代码看起来更整洁,这里将缓存的计算及清理封装自定义一个工具类CleanCaches.
利用SDWebImage计算并清理缓存:
计算单个文件大小:
+ (float)fileSizeAtPath:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; if([fileManager fileExistsAtPath:path]){ long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize; return size/1024.0/1024.0; } return 0; }
2. 计算文件夹大小(要利用上面的1提供的方法)
+ (float)folderSizeAtPath:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; float folderSize; if ([fileManager fileExistsAtPath:path]) { NSArray *childerFiles=[fileManager subpathsAtPath:path]; for (NSString *fileName in childerFiles) { NSString *absolutePath=[path stringByAppendingPathComponent:fileName]; folderSize += [self fileSizeAtPath:absolutePath]; } // SDWebImage框架自身计算缓存的实现 folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0; return folderSize; } return 0; }
3. 清除缓存:
+ (void)clearCache:(NSString *)path { NSFileManager *fileManager=[NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:path]) { NSArray *childerFiles=[fileManager subpathsAtPath:path]; for (NSString *fileName in childerFiles) { //若有须要,加入条件,过滤掉不想删除的文件 NSString *absolutePath=[path stringByAppendingPathComponent:fileName]; [fileManager removeItemAtPath:absolutePath error:nil]; } } [[SDImageCache sharedImageCache] cleanDisk]; }
而后只须要在所使用的控制器里调取计算和清理缓存的方法便可:
// 计算缓存大小 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDir = [paths objectAtIndex:0]; float size = [CleanCaches folderSizeAtPath:cachesDir]; // 清理缓存 [CleanCaches clearCache:cachesDir];
一、压缩文件截图
二、运行时的截图
界面性问题能够根据本身项目需求调整便可, 具体可参考代码, 项目可以直接运行! 也能够把工具类直接拖到本身项目里使用!