为了更好的管理和利用资源,我们经常要做一些缓存的清理工作,封装一个缓存清理的工具类,来服务于项目开发工作很有必要。
自定义CacheClean类 继承自NSObject
.h
#import <Foundation/Foundation.h>
@interface CacheClean : NSObject
/**
获取缓存路径
*/
+(NSString *)getCachePath:(NSString *)fileName;
/**
计算单个文件的大小
*/
+(long long)fileSizeInPath:(NSString *)path;
/**
计算一个文件夹的大小
*/
+(float)folderSizeInPath:(NSString *)path;
/**
清空缓存
*/
+(void)cleanCaches:(NSString *)path;
@end
.m
获取缓存路径
+(NSString *)getCachePath:(NSString *)fileName{
NSString *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject;
NSString *cachesPath = [path stringByAppendingPathComponent:fileName];
return cachesPath;
}
计算单个文件的大小
+(long long)fileSizeInPath:(NSString *)path{
//创建文件管理者
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:path]) {
//存在文件的话 就返回计算的文件大小
return [[manager attributesOfItemAtPath:path error:nil] fileSize];
}
return 0;
}
计算一个文件夹的大小
+(float)folderSizeInPath:(NSString *)path{
//创建文件管理者
NSFileManager *manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:path]) {
return 0;
}
//根据路径 获取文件夹里面的所有数据
NSEnumerator *enumerator = [[manager subpathsAtPath:path] objectEnumerator];
//获取的文件夹名字
NSString *fileName = [NSString string];
//计算结果
float folderSize = 0;
while ((fileName = [enumerator nextObject]) != nil) {
NSString *absolutePath = [path stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeInPath:absolutePath];
}
return folderSize / (1024 * 1024);
}
清空缓存
+(void)cleanCaches:(NSString *)path{
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:path]) {
NSArray *fileNameArr = [manager subpathsAtPath:path];
for (NSString *fileName in fileNameArr) {
[manager removeItemAtPath:[path stringByAppendingPathComponent:fileName] error:nil];
}
}
}
使用起来也是相当的方便 在合适的位置调用
//清除
[CacheClean cleanCaches:[CacheClean getCachePath:@"Caches"]];
//计算
float folderSize = [CacheClean folderSizeInPath:[CacheClean getCachePath:@"Caches"]];