现在为用户流量考虑,一般的APP都会做缓存处理,那么问题来了,如果缓存过多用户想清理怎么办,废话不多说,上代码:
//
// CJCacheTool.m
//
// Created by MaLingYun on 16/3/3.
//
#import "CJCacheTool.h"
@implementation CJCacheTool
// 计算缓存
+ (double)calculateCache {
//定义变量存储总的缓存大小
double sumSize = 0;
//获取当前图片缓存路径
NSString *cacheFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
//创建文件管理对象
NSFileManager *filemanager = [NSFileManager defaultManager];
//获取当前缓存路径下的所有子路径
NSArray *subPaths = [filemanager subpathsOfDirectoryAtPath:cacheFilePath error:nil];
for (NSString *subPath in subPaths) {
//拼接完整路径
NSString *filePath = [cacheFilePath stringByAppendingFormat:@"/%@",subPath];
sumSize += [self folderSizeAtPath:filePath];
}
return sumSize;
}
// 清除缓存
+ (double)clearCache {
//获取当前图片缓存路径
NSString *cacheFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
//创建文件管理对象
NSFileManager *fileManager = [NSFileManager defaultManager];
//获取当前缓存路径下的所有子路径
NSArray *subPaths = [fileManager subpathsOfDirectoryAtPath:cacheFilePath error:nil];
for (NSString *subPath in subPaths) {
//拼接完整路径
NSString *filePath = [cacheFilePath stringByAppendingFormat:@"/%@",subPath];
if ([fileManager fileExistsAtPath:filePath]) {
NSArray *childerFiles = [fileManager subpathsAtPath:filePath];
for (NSString *fileName in childerFiles) {
//如有需要,加入条件,过滤掉不想删除的文件
//此时加入的条件是路径为Library/Cache/com.xxxx.xxxxx(Bundle identifier)下的Cache.db
if (![fileName isEqualToString:@"Cache.db"]) {
NSString *absolutePath=[filePath stringByAppendingPathComponent:fileName];
[fileManager removeItemAtPath:absolutePath error:nil];
}
}
}
}
return 0;
}
// 遍历文件夹获得文件夹大小,返回多少M
+ (float)folderSizeAtPath:(NSString*)folderPath {
NSFileManager *manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:folderPath]) return 0;
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString *fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString *fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
return folderSize / (1024.0 * 1024.0);
}
// 单个文件的大小
+ (long long)fileSizeAtPath:(NSString*)filePath {
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
@end
.h文件
//
// CJCacheTool.h
//
// Created by MaLingYun on 16/3/3.
//
#import <Foundation/Foundation.h>
@interface CJCacheTool : NSObject
/**
计算缓存
* return 缓存大小,单位M
*/
+ (double)calculateCache;
/**
清除缓存
* return 清除缓存后返回0
*/
+ (double)clearCache;
@end
删除时有过滤条件 删除前后的对比:
删除前:
删除后:
至于计算完之后的四舍五入,可参考上一篇博文。四舍五入
至此,小马述一家之言。