iOS如何获取应用缓存大小和清理缓存

2025-09-29 03:19:56

1、首先定义一个缓存管理类CachesManager继承于NSObject,为了方便调用使用单例模式,CachesManager.h中定义三个方法,分别为单例方法、获取缓存大小的方法以及清理缓存的方法,具体如下:

+ (CachesManager *)sharedManager;

- (BOOL)clearCaches;

- (NSString *)getAllTheCacheFileSize;

iOS如何获取应用缓存大小和清理缓存

2、单例实现如下:

static CachesManager *_cachesManager = nil;

@implementation CachesManager

{

    NSString *_cachesDirPath;

}

- (instancetype)init {

    if (self = [super init]) {

        NSString *cachesPath =  [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

        _cachesDirPath = [cachesPath copy];

    }

    return self;

}

+ (CachesManager *)sharedManager {

    if (_cachesManager == nil) {

        @synchronized(self) {

            if (_cachesManager == nil) {

                _cachesManager = [[[self class] alloc] init];

            }

        }

    }

    return _cachesManager;

}

iOS如何获取应用缓存大小和清理缓存

3、根据文件夹路径获取文件大小:

- (long long)fileSizeAtPath:(NSString*) filePath{

    NSFileManager* manager = [NSFileManager defaultManager];

    if ([manager fileExistsAtPath:filePath]){

        return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

    }

    return 0;

}

iOS如何获取应用缓存大小和清理缓存

4、遍历整个项目文件夹数获取所有文件大小:

- (float)requestCachesFileSize {

    NSFileManager* manager = [NSFileManager defaultManager];

    if (![manager fileExistsAtPath:_cachesDirPath]) return 0;

    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:_cachesDirPath] objectEnumerator];

    NSString* fileName;

    long long folderSize = 0;

    while ((fileName = [childFilesEnumerator nextObject]) != nil){

        NSString* fileAbsolutePath = [_cachesDirPath stringByAppendingPathComponent:fileName];

        folderSize += [self fileSizeAtPath:fileAbsolutePath];

    }

    return folderSize/(1024.0*1024.0);

}

iOS如何获取应用缓存大小和清理缓存

5、获取缓存文件大小,精确到小数点后两位,单位为M。

- (NSString *)getAllTheCacheFileSize 

{

    return [NSString stringWithFormat:@"%.2f MB",[self requestCachesFileSize]];

}

iOS如何获取应用缓存大小和清理缓存

6、清理缓存文件的实现,如果获取到缓存文件大小大于0,则进行清理操作。

- (BOOL)clearCaches {

    if([self requestCachesFileSize] > 0) {

        NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:_cachesDirPath];

        for (NSString *file in files) {

            NSString *path = [_cachesDirPath stringByAppendingPathComponent:file];

            if([[NSFileManager defaultManager] fileExistsAtPath:path]) {

                [[NSFileManager defaultManager] removeItemAtPath:path error:nil];

            }

        }

        return YES;

    } else {

        return NO;

    }

}

iOS如何获取应用缓存大小和清理缓存

7、在viewDidLoad中定义文本显示缓存大小,调用示例如下:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, SCREEN_WIDTH, 50)];

    [self.view addSubview:label];

    

    NSString *strCash = [[CachesManager sharedManager] getAllTheCacheFileSize];

    label.text = strCash;

    label.textAlignment = NSTextAlignmentCenter;

    

    [[CachesManager sharedManager] clearCaches];

iOS如何获取应用缓存大小和清理缓存

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢