计算缓存文件大小

- (void)getCacheSize
{// 总大小unsigned long long size = 0;// 获得缓存文件夹路径NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;NSString *dirpath = [cachesPath stringByAppendingPathComponent:@"MP3"];// 文件管理者NSFileManager *mgr = [NSFileManager defaultManager];// 获得文件夹的大小  == 获得文件夹中所有文件的总大小
//    XMGLog(@"contents - %@", [mgr contentsOfDirectoryAtPath:dirpath error:nil]);NSArray *subpaths = [mgr subpathsAtPath:dirpath];for (NSString *subpath in subpaths) {// 全路径NSString *fullSubpath = [dirpath stringByAppendingPathComponent:subpath];// 累加文件大小size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;//        NSDictionary *attrs = [mgr attributesOfItemAtPath:fullSubpath error:nil];
//        size += [attrs[NSFileSize] unsignedIntegerValue];}NSLog(@"%zd", size);
}

计算缓存文件大小工具封装 (可给NSString增加分类)

//声明
- (unsigned long long)fileSize;//实现
- (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;
}

清除缓存的Cell 自定义Cell 声明与实现

//
//  JGClearCacheCell.h
//
//
//  Created by JG on 16/12/08.
//  Copyright © 2016年 JG. All rights reserved.
//#import <UIKit/UIKit.h>@interface JGClearCacheCell : UITableViewCell@end//
//  JGClearCacheCell.m
//
//
//  Created by JG on 16/12/08.
//  Copyright © 2016年 JG. All rights reserved.
//#import "JGClearCacheCell.h"
#import <SDImageCache.h>
#import <SVProgressHUD.h>#define JGCustomCacheFile [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"]@implementation JGClearCacheCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {// 设置cell右边的指示器(用来说明正在处理一些事情)UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];[loadingView startAnimating];self.accessoryView = loadingView;// 设置cell默认的文字(如果设置文字之前userInteractionEnabled=NO, 那么文字会自动变成浅灰色)self.textLabel.text = @"清除缓存(正在计算缓存大小...)";// 禁止点击self.userInteractionEnabled = NO;//        int age = 10;
//        typeof(age) age2 = 10;//        __weak JGClearCacheCell * weakSelf = self;__weak typeof(self) weakSelf = self;// 在子线程计算缓存大小dispatch_async(dispatch_get_global_queue(0, 0), ^{[NSThread sleepForTimeInterval:2.0];// 获得缓存文件夹路径unsigned long long size = JGCustomCacheFile.fileSize;size += [SDImageCache sharedImageCache].getSize;// 如果cell已经销毁了, 就直接返回if (weakSelf == nil) return;NSString *sizeText = nil;if (size >= pow(10, 9)) { // size >= 1GBsizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];} else if (size >= pow(10, 6)) { // 1GB > size >= 1MBsizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];} else if (size >= pow(10, 3)) { // 1MB > size >= 1KBsizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];} else { // 1KB > sizesizeText = [NSString stringWithFormat:@"%zdB", size];}// 生成文字NSString *text = [NSString stringWithFormat:@"清除缓存(%@)", sizeText];// 回到主线程dispatch_async(dispatch_get_main_queue(), ^{// 设置文字weakSelf.textLabel.text = text;// 清空右边的指示器weakSelf.accessoryView = nil;// 显示右边的箭头weakSelf.accessoryType = UITableViewCellAccessoryDisclosureIndicator;// 添加手势监听器[weakSelf addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:weakSelf action:@selector(clearCache)]];// 恢复点击事件weakSelf.userInteractionEnabled = YES;});});}return self;
}/***  清除缓存*/
- (void)clearCache
{// 弹出指示器[SVProgressHUD showWithStatus:@"正在清除缓存..." maskType:SVProgressHUDMaskTypeBlack];// 删除SDWebImage的缓存[[SDImageCache sharedImageCache] clearDiskOnCompletion:^{// 删除自定义的缓存dispatch_async(dispatch_get_global_queue(0, 0), ^{NSFileManager *mgr = [NSFileManager defaultManager];[mgr removeItemAtPath:JGCustomCacheFile error:nil];[mgr createDirectoryAtPath:JGCustomCacheFile withIntermediateDirectories:YES attributes:nil error:nil];// 所有的缓存都清除完毕dispatch_async(dispatch_get_main_queue(), ^{// 隐藏指示器[SVProgressHUD dismiss];// 设置文字self.textLabel.text = @"清除缓存(0B)";});});}];
}/***  当cell重新显示到屏幕上时, 也会调用一次layoutSubviews*/
- (void)layoutSubviews
{[super layoutSubviews];// cell重新显示的时候, 继续转圈圈UIActivityIndicatorView *loadingView = (UIActivityIndicatorView *)self.accessoryView;[loadingView startAnimating];
}@end

转载于:https://www.cnblogs.com/GJ-ios/p/6146489.html

计算缓存文件大小、清除缓存的Cell相关推荐

  1. ajax 自动清缓存,ajax 清除缓存

    $.ajax({ url : actionUrl , beforeSend :function(xmlHttp){  // deforeSend 是请求前清除缓存  ,如果没有缓存也不使用before ...

  2. 实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发

    文章目录 概述 接口层改造 CacheService接口 CacheService接口实现类 工具类中的方法 单元测试 Github地址 概述 设计如下: 在接口层传入缓存key的前缀,通过匹配的方式 ...

  3. php 微信怎么清除缓存,前端清除缓存方法(微信缓存引起的bug)

    bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...

  4. yarn设置缓存,清除缓存

    查看yarn全局缓存目录 yarn cache dir 清除缓存 yarn cache clean 设置缓存目录 yarn config set cache-folder <path># ...

  5. vue 页面保留缓存和清除缓存

    路由: routes: [{ path: '/page1', name: page1', component: page1', meta:{ keepAlive:true  //true是保存缓存,f ...

  6. C#数据 缓存,增加缓存和清除缓存

    C#数据缓存 1 引入缓存帮助类 public class CacheHelp{/// <summary>/// 缓存指定对象,设置缓存/// </summary>/// &l ...

  7. MUI调用原生自定义方法实现计算缓存与清空缓存

    由于项目需要最近在做webapp开发用的是MUI框架,自己本来是做原生开发的,在开发的时候有一个需求是实现计算缓存和清除缓存的功能,原生java方法实现轻轻松松,网上代码一大把,不过是webapp倒是 ...

  8. android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...

    本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...

  9. 安卓应用清除缓存一般清理目录和代码(带弹框

    一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径为/data/data/pacgage_name/文件,先来看看一般缓存会存在哪些文件中: (1)缓存文件夹: /data/dat ...

  10. 安卓应用清除缓存一般清理目录和代码(带弹框)

    一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径为/data/data/pacgage_name/文件,先来看看一般缓存会存在哪些文件中: (1)缓存文件夹: /data/dat ...

最新文章

  1. python字符串操作
  2. CVPR2021|基于分类深度分布网络的单目3D物体检测
  3. [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
  4. dialogue怎么读_法语助手|法汉-汉法词典 dialogue是什么意思_dialogue的中文解释和发音_dialogue的翻译_dialogue怎么读...
  5. uasset python_Unreal Python 结合 C++ 开发蓝图库插件
  6. 【java基础知识】java打包后再dos命令行中文显示乱码的问题
  7. Java实现Base64编码和解码的方式
  8. pd 修改列名_Python-修改列名、缺失值探索以及替代vlookup的join()使用方法
  9. [GCN] 图卷积知识梳理 -持续更新
  10. 金特会谈:有骨气的人,才会被人尊重
  11. matlab分析分子动力学,分子动力学程序框架
  12. 威纶通触摸屏上传错误_轻松学会威纶通触摸屏上传与反编译
  13. [答疑]请问商品领用审批的序列图画的对么
  14. 做一个小程序需要多少钱?
  15. WSL:关闭WSL【vmmem 进程占用CPU资源的解决办法】
  16. 《研磨设计模式》 与 《设计模式之禅》对比
  17. 如何把excel里面中文小写数字转换成阿拉伯数字
  18. Ansys·Icem·T型喷管的网格生成
  19. Linux-core dump详解
  20. key_t键和ftok函数

热门文章

  1. 2017北理复试机试题
  2. 美发布《2025年的数学科学》报告
  3. Spring整合CXF发布及调用WebService
  4. [贪心+模拟] zoj 3829 Known Notation
  5. [转]网友monkeylarry研究生期间我们应该做什么
  6. 总结篇——nginx代理服务器
  7. 咱们开始吧!第一次作业
  8. 用条件运算符编写程序判断一个人的体重是否为标准体重
  9. OEM信息自定义工具v2.0
  10. 25+开源的在线购物软件(PHP, JavaScript 和 ASP.Net)