计算缓存文件大小、清除缓存的Cell
计算缓存文件大小
- (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相关推荐
- ajax 自动清缓存,ajax 清除缓存
$.ajax({ url : actionUrl , beforeSend :function(xmlHttp){ // deforeSend 是请求前清除缓存 ,如果没有缓存也不使用before ...
- 实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发
文章目录 概述 接口层改造 CacheService接口 CacheService接口实现类 工具类中的方法 单元测试 Github地址 概述 设计如下: 在接口层传入缓存key的前缀,通过匹配的方式 ...
- php 微信怎么清除缓存,前端清除缓存方法(微信缓存引起的bug)
bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...
- yarn设置缓存,清除缓存
查看yarn全局缓存目录 yarn cache dir 清除缓存 yarn cache clean 设置缓存目录 yarn config set cache-folder <path># ...
- vue 页面保留缓存和清除缓存
路由: routes: [{ path: '/page1', name: page1', component: page1', meta:{ keepAlive:true //true是保存缓存,f ...
- C#数据 缓存,增加缓存和清除缓存
C#数据缓存 1 引入缓存帮助类 public class CacheHelp{/// <summary>/// 缓存指定对象,设置缓存/// </summary>/// &l ...
- MUI调用原生自定义方法实现计算缓存与清空缓存
由于项目需要最近在做webapp开发用的是MUI框架,自己本来是做原生开发的,在开发的时候有一个需求是实现计算缓存和清除缓存的功能,原生java方法实现轻轻松松,网上代码一大把,不过是webapp倒是 ...
- android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...
本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...
- 安卓应用清除缓存一般清理目录和代码(带弹框
一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径为/data/data/pacgage_name/文件,先来看看一般缓存会存在哪些文件中: (1)缓存文件夹: /data/dat ...
- 安卓应用清除缓存一般清理目录和代码(带弹框)
一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径为/data/data/pacgage_name/文件,先来看看一般缓存会存在哪些文件中: (1)缓存文件夹: /data/dat ...
最新文章
- python字符串操作
- CVPR2021|基于分类深度分布网络的单目3D物体检测
- [洛谷P2742]【模板】二维凸包([USACO5.1]圈奶牛Fencing the Cows)
- dialogue怎么读_法语助手|法汉-汉法词典 dialogue是什么意思_dialogue的中文解释和发音_dialogue的翻译_dialogue怎么读...
- uasset python_Unreal Python 结合 C++ 开发蓝图库插件
- 【java基础知识】java打包后再dos命令行中文显示乱码的问题
- Java实现Base64编码和解码的方式
- pd 修改列名_Python-修改列名、缺失值探索以及替代vlookup的join()使用方法
- [GCN] 图卷积知识梳理 -持续更新
- 金特会谈:有骨气的人,才会被人尊重
- matlab分析分子动力学,分子动力学程序框架
- 威纶通触摸屏上传错误_轻松学会威纶通触摸屏上传与反编译
- [答疑]请问商品领用审批的序列图画的对么
- 做一个小程序需要多少钱?
- WSL:关闭WSL【vmmem 进程占用CPU资源的解决办法】
- 《研磨设计模式》 与 《设计模式之禅》对比
- 如何把excel里面中文小写数字转换成阿拉伯数字
- Ansys·Icem·T型喷管的网格生成
- Linux-core dump详解
- key_t键和ftok函数