封装一个计算文件大小的功能
第一步:
Snip20161031_5.png
第二步:
Snip20161031_6.png
第三步:
Snip20161031_7.png
#import <Foundation/Foundation.h> @interface NSString (LYWExtension) - (unsigned long long)fileSize; @end
第四步:
Snip20161031_14.png
#import "NSString+LYWExtension.h" @implementation NSString (LYWExtension) - (unsigned long long)fileSize { // 总大小 unsigned long long size = 0; // 文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; // 是否为文件夹 BOOL isDirectory = NO; // 路径是否存在 BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory]; if (!exists) return size; if (isDirectory) { // 文件夹 // 获得文件夹的大小 == 获得文件夹中所有文件的总大小 NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self]; for (NSString *subpath in enumerator) { // 全路径 NSString *fullSubpath = [self stringByAppendingPathComponent:subpath]; // 累加文件大小 size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize; } } else { // 文件 size = [mgr attributesOfItemAtPath:self error:nil].fileSize; } return size; } @end
初步简单使用
Snip20161031_13.png
效果:
regi.gif
我们打开沙河查看文件大小,对比。
Snip20161031_15.png
下面我们就让它显示成多少M 多少G
Snip20161031_17.png
Snip20161031_18.png
清除缓存
Snip20161031_19.png
代码附上
#import "SsrtextViewController.h" #import "NSString+LYWExtension.h" #import "SVProgressHUD.h" #import "SDImageCache.h" @interface SsrtextViewController () @property (strong, nonatomic)UILabel *lab; @end @implementation SsrtextViewController - (void)viewDidLoad { [super viewDidLoad]; _lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 100)]; _lab.backgroundColor = RandomColor; _lab.textAlignment = NSTextAlignmentCenter; [self.view addSubview:_lab]; _lab.text = @"清除缓存(正在计算缓存大小...)"; // 在子线程计算缓存大小 dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 获得缓存文件夹路径(这个是我们自己的缓存文件) unsigned long long size = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"].fileSize; //这个是SDWebImage缓存的文件 size += [SDImageCache sharedImageCache].getSize; NSString *sizeText = nil; if (size >= pow(10, 9)) { // size >= 1GB sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)]; } else if (size >= pow(10, 6)) { // 1GB > size >= 1MB sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)]; } else if (size >= pow(10, 3)) { // 1MB > size >= 1KB sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)]; } else { // 1KB > size sizeText = [NSString stringWithFormat:@"%zdB", size]; } //下面也是一种换算文件大小的方式 // if (size >= 1000 * 1000 * 1000) { // size >= 1GB // sizeText = [NSString stringWithFormat:@"%.2fGB", size / 1000.0 / 1000.0 / 1000.0]; // } else if (size >= 1000 * 1000) { // 1GB > size >= 1MB // sizeText = [NSString stringWithFormat:@"%.2fMB", size / 1000.0 / 1000.0]; // } else if (size >= 1000) { // 1MB > size >= 1KB // sizeText = [NSString stringWithFormat:@"%.2fKB", size / 1000.0]; // } else { // 1KB > size // sizeText = [NSString stringWithFormat:@"%zdB", size]; // } // 生成文字 NSString *text = [NSString stringWithFormat:@"清除缓存(%@)", sizeText]; // 回到主线程 dispatch_async(dispatch_get_main_queue(), ^{ // 设置文字 _lab.text = text; // 添加手势监听器 [_lab addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clearCache)]]; }); }); } /** * 清除缓存 */ - (void)clearCache { // 弹出指示器 [SVProgressHUD showInfoWithStatus:@"正在清除缓存..."]; // 删除SDWebImage的缓存 [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{ // 删除自定义的缓存 dispatch_async(dispatch_get_global_queue(0, 0), ^{ //文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; //移除该文件夹 [mgr removeItemAtPath:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"] error:nil]; //再创建该文件夹 [mgr createDirectoryAtPath:[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"] withIntermediateDirectories:YES attributes:nil error:nil]; // 所有的缓存都清除完毕 dispatch_async(dispatch_get_main_queue(), ^{ // 隐藏指示器 [SVProgressHUD dismiss]; // 设置文字 _lab.text = @"清除缓存(0B)"; }); }); }]; }
我们再来对比看一下