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 清理缓存功能实现相关推荐

  1. android清理缓存功能吗,android实现清理缓存功能

    android之清理缓存实现,供大家参考,具体内容如下 一. 清理缓存首先要搞清楚清理哪些东西 1.app本身的功能比如录像,录音,更新都会产生文件,需要清理 2.app的默认缓存地址cache 二. ...

  2. android 实现清理缓存功能

    很多App设置里面都会有清理缓存这个小功能,当我们app所浏览一些图片啊,或者信息,都会缓存起来,包括存在本地的一些数据,这些呢会使我们app占用的内存变大,但是会节省我们的流量使用,我们清理缓存后占 ...

  3. iOS - 清理缓存

    // 显示缓存大小 func fileSizeOfCache()-> Int {// 1. 取出cache文件夹目录 缓存文件都在这个目录下let cachePath = NSSearchPat ...

  4. iOS开发-清理缓存功能的实现

    移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯.购物.阅 ...

  5. android清理缓存功能吗,Android清理缓存功能实现

    我们都知道在Android的设置->应用程序中可以查看应用程序的相关信息,其中有一个功能是清除缓存.如图: 怎么实现这些功能呢,从Android的setting源码中可以得到相关信息. 实现如下 ...

  6. flutter 显示缓存大小,清理缓存功能

    Flutter 获取应用缓存需要借助于path_provider插件. path_provider 是一个用于查找文件系统上常用位置的Flutter插件.用来获取 Android 和 iOS 的缓存文 ...

  7. uniapp 实现APP设置获取缓存清理缓存

    uniapp 实现APP设置获取缓存清理缓存 公司需要开发一款app 功能有在设置里显示缓存 以及清理缓存功能 实现方式 如下 页面效果如下 获取本机缓存 <view class="i ...

  8. h5、微信浏览器、微信公众号清理缓存的常用方法

    h5浏览器特别是微信公众号存在缓存的问题,让我们在测试.产品.用户面前彻底丢了面子,他们会问.为什么会有缓存?别人的产品可以做到,为什么我们的不可以? 下面提供几种方案可以尝试处理h5浏览器缓存的问题 ...

  9. iOS开发 - Swift实现清除缓存功能

    前言: 开发移动应用时,请求网络资源是再常见不过的功能.如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见. 但是时间长了,离线缓存会占用大量的手 ...

  10. ios html清除缓存图片,iOS,如何清理缓存的图片

    通常,在我们加载图片的时候,一般都会做缓存处理,像SDWebImage,YYWebImage都是有的,但是有缓存,当然也需要清理缓存,如果没有这个功能的话,显得app太没人性化. 获取总的缓存大小 / ...

最新文章

  1. echarts X轴 或者 Y轴 添加标识线
  2. POJ 3342 树形DP+Hash
  3. 科技产品下一个重大突破将来自芯片堆叠技术
  4. 《Spring Boot极简教程》附录4 Java编程简史
  5. 修改shell提示符的显示格式
  6. Apache的认证、授权、访问控制
  7. Junit5新功能一览
  8. 支持多协议多服务的服务器设计和实现的步骤,基于多协议的人工影响天气接入服务器设计与实现...
  9. 息中间件kafka与activeMQ、rabbitMQ、zeroMQ、rocketMQ的比较
  10. SpringBoot : BeanFactory
  11. 【LOJ】 #2521. 「FJOI2018」领导集团问题
  12. matlab2c使用c++实现matlab函数系列教程-median函数
  13. php对接小程序获取表单,PHP实现微信小程序用户授权的工具类
  14. css+div(2)
  15. 计算机没有本地网络,网络连接里没有本地连接
  16. 【Linux系统】第5节 Linux增删改查常用命令及查看命令字帮助手册
  17. c语言编程图案大全,C语言中图案的编程
  18. 软件测试仿真系统,嵌入式系统软件仿真自动化黑盒测试平台
  19. 彝文计算机,计算机彝文信息处理主流技术的分析与探讨
  20. 那些不用写代码也能做游戏的工具

热门文章

  1. unity暂停和继续按钮
  2. ORA-01427:单行子查询返回多个行
  3. 华硕ac68u最佳设置_【华硕RT-AC68U路由器使用总结】频段|设置|信号_摘要频道_什么值得买...
  4. 【bzoj4200】[Noi2015]小园丁与老司机 dp+有上下界的网络流
  5. wjh2005:GitHub 上有哪些完整的 iOS-App 源码值得参考?
  6. C/C++复习:向量的数量积
  7. 存:科幻推荐书单---超经典科幻必读
  8. 江南大学计算机考研资料汇总
  9. STM32 汉字库+ascii字库 存放到 flash中
  10. 滴滴DSRC抢楼大赛,十一快车券飞起来