计算缓存与清除缓存

现在为用户流量考虑,一般的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


删除时有过滤条件 删除前后的对比:

删除前:

删除后:


至于计算完之后的四舍五入,可参考上一篇博文。四舍五入

至此,小马述一家之言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值