ios 清理缓存功能实现
1. 计算 沙盒 缓存大小 ,可能是 耗时 操作,放入子线程
- (void)viewDidLoad {[super viewDidLoad];// 沙盒路径 获取NSLog(@"%@",NSHomeDirectory());// 计算 缓存大小,可能是 耗时 操作,放入子线程dispatch_async(dispatch_get_global_queue(0, 0), ^{// library/cacheNSString* cachePath= NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;// 获取文件管理者NSFileManager* mgr= [NSFileManager defaultManager];NSString* dirpath= [cachePath stringByAppendingPathComponent:@"mp3"];NSLog(@"dirpath=%@",dirpath);// 是否为文件夹BOOL isDirectory=NO;BOOL exists= [mgr fileExistsAtPath:dirpath isDirectory:&isDirectory];if(!exists){NSLog(@"%@",@"目录不存在");return ;}// 获取 文件、文件夹 属性NSDictionary* attrss= [mgr attributesOfItemAtPath:dirpath error:nil];/**attrss={NSFileCreationDate = "2020-07-11 02:33:52 +0000";NSFileExtensionHidden = 0;NSFileGroupOwnerAccountID = 20;NSFileGroupOwnerAccountName = staff;NSFileModificationDate = "2020-07-11 02:35:01 +0000";NSFileOwnerAccountID = 501;NSFilePosixPermissions = 493;NSFileReferenceCount = 5;NSFileSize = 160;NSFileSystemFileNumber = 8603496038;NSFileSystemNumber = 16777220;NSFileType = NSFileTypeDirectory; 文件夹类NSFileTypeRegular: 文件类型}*/NSLog(@"attrss=%@",attrss);NSInteger size=0;if(isDirectory){NSArray* subpaths= [mgr subpathsAtPath:dirpath];for(int i=0;i<subpaths.count;i++){// 全路径NSString* fullSubpath= [dirpath stringByAppendingPathComponent:subpaths[i]];// 文件属性NSDictionary* attrs= [mgr attributesOfItemAtPath:fullSubpath error:nil];// 把所有大小 累加起来size= size + [attrs[NSFileSize] unsignedIntegerValue];}// mac 下计算 kb 是 除以 1000 来计算NSLog(@"dict->size=%ld",size);}else{size = size + [mgr attributesOfItemAtPath:dirpath error:nil].fileSize;NSLog(@"file->size=%ld",size);}dispatch_async(dispatch_get_main_queue(), ^{// 更新UI 回到主队列NSLog(@"file->size=%ld",size);});});
}
清理缓存功能:
1. 把 Library/Caches下 sdwebimages 和 自己的
文件夹路径 下, 下载的文件 获取 然后清除
2. 不属于 自己的东西 文件目录不要 去清除,
避免出现问题
把上面代码封装到分类中实现:
NSString+XMGExtension.h
#import <Foundation/Foundation.h>@interface NSString (XMGExtension)
- (unsigned long long)fileSize;
@end
NSString+XMGExtension.m
//
// NSString+XMGExtension.m
// 5期-百思不得姐
//
// Created by xiaomage on 15/11/16.
// Copyright © 2015年 xiaomage. All rights reserved.
//#import "NSString+XMGExtension.h"@implementation NSString (XMGExtension)
//- (unsigned long long)fileSize
//{
// // 总大小
// unsigned long long size = 0;
//
// // 文件管理者
// NSFileManager *mgr = [NSFileManager defaultManager];
//
// // 文件属性
// NSDictionary *attrs = [mgr attributesOfItemAtPath:self error:nil];
//
// if ([attrs.fileType isEqualToString:NSFileTypeDirectory]) { // 文件夹
// // 获得文件夹的大小 == 获得文件夹中所有文件的总大小
// NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:self];
// for (NSString *subpath in enumerator) {
// // 全路径
// NSString *fullSubpath = [self stringByAppendingPathComponent:subpath];
// // 累加文件大小
// size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;
// }
// } else { // 文件
// size = attrs.fileSize;
// }
//
// return size;
//}- (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
cell 封装:
XMGClearCacheCell.h
#import <UIKit/UIKit.h>@interface XMGClearCacheCell : UITableViewCell@end
XMGClearCacheCell.m
#import "XMGClearCacheCell.h"
#import "NSString+XMGExtension.h"
//#import <SDImageCache.h>
//#import <SVProgressHUD.h>//#define XMGCustomCacheFile [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Custom"]#define XMGCustomCacheFile @"/Users/denganzhi/Desktop/内容"@implementation XMGClearCacheCell- (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 XMGClearCacheCell * weakSelf = self;__weak typeof(self) weakSelf = self;// 在子线程计算缓存大小dispatch_async(dispatch_get_global_queue(0, 0), ^{[NSThread sleepForTimeInterval:2.0];// 获得缓存文件夹路径unsigned long long size = XMGCustomCacheFile.fileSize;// size += [SDImageCache sharedImageCache].getSize;[NSThread sleepForTimeInterval:10.0];// 如果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:@"%lluB", size];}// 生成文字NSString *text = [NSString stringWithFormat:@"清除缓存(%@)", sizeText];// 回到主线程dispatch_async(dispatch_get_main_queue(), ^{// 设置文字weakSelf.textLabel.text = text;// 清空右边的指示器,必须 清空才设置 新的指示器// 因为 accessoryView 优先级 高于 accessoryTypeweakSelf.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:XMGCustomCacheFile error:nil];[mgr createDirectoryAtPath:XMGCustomCacheFile withIntermediateDirectories:YES attributes:nil error:nil];// 所有的缓存都清除完毕dispatch_async(dispatch_get_main_queue(), ^{// 隐藏指示器// [SVProgressHUD dismiss];// 设置文字self.textLabel.text = @"清除缓存(0B)";});});// }];
}/*** 当cell重新显示到屏幕上时, 也会调用一次layoutSubviews** 当cell 消失的时候动画会 停止 , 当cell 出现的时候 不会调用 initWithStyle方法,而是 会调用layoutSubviews 方法,重新启动动画*/
- (void)layoutSubviews
{[super layoutSubviews];// cell重新显示的时候, 继续转圈圈UIActivityIndicatorView *loadingView = (UIActivityIndicatorView *)self.accessoryView;[loadingView startAnimating];
}@end
cell 使用:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{XMGClearCacheCell* xmgclear= [[XMGClearCacheCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier: nil];return xmgclear;
}
效果图:
源码地址: https://download.csdn.net/download/dreams_deng/12614145
ios 清理缓存功能实现相关推荐
- android清理缓存功能吗,android实现清理缓存功能
android之清理缓存实现,供大家参考,具体内容如下 一. 清理缓存首先要搞清楚清理哪些东西 1.app本身的功能比如录像,录音,更新都会产生文件,需要清理 2.app的默认缓存地址cache 二. ...
- android 实现清理缓存功能
很多App设置里面都会有清理缓存这个小功能,当我们app所浏览一些图片啊,或者信息,都会缓存起来,包括存在本地的一些数据,这些呢会使我们app占用的内存变大,但是会节省我们的流量使用,我们清理缓存后占 ...
- iOS - 清理缓存
// 显示缓存大小 func fileSizeOfCache()-> Int {// 1. 取出cache文件夹目录 缓存文件都在这个目录下let cachePath = NSSearchPat ...
- iOS开发-清理缓存功能的实现
移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅 ...
- android清理缓存功能吗,Android清理缓存功能实现
我们都知道在Android的设置->应用程序中可以查看应用程序的相关信息,其中有一个功能是清除缓存.如图: 怎么实现这些功能呢,从Android的setting源码中可以得到相关信息. 实现如下 ...
- flutter 显示缓存大小,清理缓存功能
Flutter 获取应用缓存需要借助于path_provider插件. path_provider 是一个用于查找文件系统上常用位置的Flutter插件.用来获取 Android 和 iOS 的缓存文 ...
- uniapp 实现APP设置获取缓存清理缓存
uniapp 实现APP设置获取缓存清理缓存 公司需要开发一款app 功能有在设置里显示缓存 以及清理缓存功能 实现方式 如下 页面效果如下 获取本机缓存 <view class="i ...
- h5、微信浏览器、微信公众号清理缓存的常用方法
h5浏览器特别是微信公众号存在缓存的问题,让我们在测试.产品.用户面前彻底丢了面子,他们会问.为什么会有缓存?别人的产品可以做到,为什么我们的不可以? 下面提供几种方案可以尝试处理h5浏览器缓存的问题 ...
- iOS开发 - Swift实现清除缓存功能
前言: 开发移动应用时,请求网络资源是再常见不过的功能.如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见. 但是时间长了,离线缓存会占用大量的手 ...
- ios html清除缓存图片,iOS,如何清理缓存的图片
通常,在我们加载图片的时候,一般都会做缓存处理,像SDWebImage,YYWebImage都是有的,但是有缓存,当然也需要清理缓存,如果没有这个功能的话,显得app太没人性化. 获取总的缓存大小 / ...
最新文章
- echarts X轴 或者 Y轴 添加标识线
- POJ 3342 树形DP+Hash
- 科技产品下一个重大突破将来自芯片堆叠技术
- 《Spring Boot极简教程》附录4 Java编程简史
- 修改shell提示符的显示格式
- Apache的认证、授权、访问控制
- Junit5新功能一览
- 支持多协议多服务的服务器设计和实现的步骤,基于多协议的人工影响天气接入服务器设计与实现...
- 息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
- SpringBoot : BeanFactory
- 【LOJ】 #2521. 「FJOI2018」领导集团问题
- matlab2c使用c++实现matlab函数系列教程-median函数
- php对接小程序获取表单,PHP实现微信小程序用户授权的工具类
- css+div(2)
- 计算机没有本地网络,网络连接里没有本地连接
- 【Linux系统】第5节 Linux增删改查常用命令及查看命令字帮助手册
- c语言编程图案大全,C语言中图案的编程
- 软件测试仿真系统,嵌入式系统软件仿真自动化黑盒测试平台
- 彝文计算机,计算机彝文信息处理主流技术的分析与探讨
- 那些不用写代码也能做游戏的工具
热门文章
- unity暂停和继续按钮
- ORA-01427:单行子查询返回多个行
- 华硕ac68u最佳设置_【华硕RT-AC68U路由器使用总结】频段|设置|信号_摘要频道_什么值得买...
- 【bzoj4200】[Noi2015]小园丁与老司机 dp+有上下界的网络流
- wjh2005:GitHub 上有哪些完整的 iOS-App 源码值得参考?
- C/C++复习:向量的数量积
- 存:科幻推荐书单---超经典科幻必读
- 江南大学计算机考研资料汇总
- STM32 汉字库+ascii字库 存放到 flash中
- 滴滴DSRC抢楼大赛,十一快车券飞起来