//
// LSHClearCache.h
// MTTourism
//
// Created by mt-xm02 on 2020/2/26.
// Copyright © 2020年 lsh. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^CleanCacheBlock)(void);
@interface LSHClearCache : NSObject
/**
清理缓存
@param block 清理成功回到主线程的回调
*/
+ (void)cleanCache:(CleanCacheBlock)block;
/**
* 计算整个目录大小,以M为单位
*/
+ (float)folderSizeAtPath;
/**
* 计算单个文件大小
*/
+ (long long)fileSizeAtPath:(NSString *)filePath;
@end
NS_ASSUME_NONNULL_END
//
// LSHClearCache.m
// MTTourism
//
// Created by mt-xm02 on 2020/2/26.
// Copyright © 2020年 lsh. All rights reserved.
//
#import "LSHClearCache.h"
@implementation LSHClearCache
/**
清理缓存
@param block 清理成功回到主线程的回调
*/
+ (void)cleanCache:(CleanCacheBlock)block
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//文件路径
NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
//子文件数组
NSArray *subpaths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directoryPath error:nil];
for (NSString *subPath in subpaths) {
NSString *filePath = [directoryPath stringByAppendingPathComponent:subPath];
[[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
}
//返回主线程
dispatch_async(dispatch_get_main_queue(), ^{
block();
});
});
}
/**
* 计算整个目录大小,以M为单位
*/
+ (float)folderSizeAtPath
{
NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSFileManager *manager = [NSFileManager defaultManager ];
if (![manager fileExistsAtPath:folderPath]) {
return 0;
}
//NSEnumerator一种遍历NSArray的方式
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