• Bg

    1)由于项目需求需要,需要在设置页面其中一个cell里面展示缓存大小,并提供清除缓存功能,发现之前自己一直使用的那个计算并清除缓存的方法并不完善,而且一直都有想要完善一下的想法,由此写下这篇文章,提供给有需要帮助的朋友参考
    2)代码的话就只提供一个简版的工具类了,使用很简单,也简单说明下

  • 先看下简单的效果图

    cache.gif

  • 简单介绍

    现在这个功能已经被抽成一个简单的工具类,既然是工具类,那么就先说明下如何使用

  • 获取文件夹大小

1)既然清除缓存就需要先计算缓存,工具类里面提供了一个计算缓存大小的类方法,你只需要提供一个需要计算的文件夹路径

/***  @author li bo, 16/05/29**  获取path路径文件夹的大小**  @param path 要获取大小的文件夹全路径**  @return 返回path路径文件夹的大小*/
+ (NSString *)getCacheSizeWithFilePath:(NSString *)path;

2)一般显示缓存大小都是在cell上的label里面,这个label可以是使用系统的可以自己添加的,这里提供一个简单版的使用

 在tableView的cellForRowAtIndexPath这个方法里面if (indexPath.row==0)  //如果是清除缓存对应的这个cell{NSString *fileSize = [LBClearCacheTool getCacheSizeWithFilePath:filePath];if ([fileSize integerValue] == 0)//如果没有缓存,那么不需要显示缓存大小{cell.textLabel.text = @"清除缓存";}else //缓存大小不为0,显示缓存大小{cell.textLabel.text = [NSString stringWithFormat:@"清除缓存(%@)",fileSize];}}

3)获取文件夹大小部分代码实现

//调试
#ifdef DEBUG//如果文件夹不存在或者不是一个文件夹那么就抛出一个异常//抛出异常会导致程序闪退,所以只在调试阶段抛出,发布阶段不要再抛了,不然极度影响用户体验BOOL isDirectory = NO;BOOL isExist = [fileManager fileExistsAtPath:path isDirectory:&isDirectory];if (!isExist || !isDirectory){NSException *exception = [NSException exceptionWithName:@"fileError" reason:@"please check your filePath!" userInfo:nil];[exception raise];}NSLog(@"debug");
//发布
#elseNSLog(@"post");
#endif//以上判断目的是忽略不需要计算的文件if (!isExist || isDirectory || [filePath containsString:@".DS"]) continue;//NSLog(@"%@",filePath);//指定路径,获取这个路径的属性//attributesOfItemAtPath:需要传文件夹路径//但是attributesOfItemAtPath 只可以获得文件属性,不可以获得文件夹属性,这个也就是需要for-in遍历文件夹里面每一个文件的原因NSDictionary *dict=   [fileManager attributesOfItemAtPath:filePath error:nil];NSInteger size=[dict[@"NSFileSize"] integerValue];totleSize+=size;}
清除文件夹缓存

1)既然要清除,工具类里面也提供了一个清除文件夹缓存的类方法,需要辛苦你操作的依然是提供你需要清除缓存的文件夹全路径

/***  @author li bo, 16/05/29**  清除path路径文件夹的缓存**  @param path  要清除缓存的文件夹全路径**  @return 是否清除成功*/
+ (BOOL)clearCacheWithFilePath:(NSString *)path;

2)一般清除缓存都是在我们点击了对应这一行cell的时候才会去执行的,这里就在cell被点击的方法里面执行对应的清除操作

在tableView的didSelectRowAtIndexPath方法中执行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{if (indexPath.row == 0) {//如果是需要清除缓存对应的cellUIAlertController *alert=[UIAlertController alertControllerWithTitle:@"确定清除缓存吗?" message:nil preferredStyle:UIAlertControllerStyleActionSheet];//创建一个取消和一个确定按钮UIAlertAction *actionCancle=[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];//因为需要点击确定按钮后改变文字的值,所以需要在确定按钮这个block里面进行相应的操作UIAlertAction *actionOk=[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {//清楚缓存BOOL isSuccess = [LBClearCacheTool clearCacheWithFilePath:filePath];if (isSuccess)  //如果清除成功{ //刷新指定行,让cell更新缓存大小这个状态[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];//来一个指示器,提示清除成功,这样用户体验比较好[SVProgressHUD setDefaultStyle:SVProgressHUDStyleDark];[SVProgressHUD showSuccessWithStatus:@"清除成功"];//弹框提示1秒后,把这个弹框消失,默认的消失时间有点长dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[SVProgressHUD dismiss];});}}];//将取消和确定按钮添加进弹框控制器[alert addAction:actionCancle];[alert addAction:actionOk];//显示弹框控制器[self presentViewController:alert animated:YES completion:nil];}}

3)清除缓存功能部分代码实现

/拿到path路径的下一级目录的子文件夹NSArray *subpathArray = [fileManager contentsOfDirectoryAtPath:path error:nil];//删除子文件夹[fileManager removeItemAtPath:filePath error:&error];if (error) {message = [NSString stringWithFormat:@"%@这个路径的文件夹删除失败了,请检查后重新再试",filePath];return NO;}else {message = @"成功了";}
OK,文章暂时写到这里啦,上班时间还要专心工作滴,具体的获取缓存大小以及清除缓存功能的实现,包括这个工具类,由于文字解释比较详细,如果感兴趣的朋友,大家可以直接下载代码查看,另外大家没事可以多参考SD_Webimage源码,里面很多好东西的哦,它里面其实就有比较好的计算以及清除缓存的功能的。
另外参考欢迎交流,感谢支持。
可以点击这里进行下载
文/小小小阿博er(简书作者)
原文链接:http://www.jianshu.com/p/d03ab9160ef4
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS开发 - 清除缓存相关推荐

  1. iOS UIWebView清除缓存

    为什么80%的码农都做不了架构师?>>>    使用iOS的UIWebView会自动进行缓存,我们在开发的时候要记得清除Cookie和缓存. 在webview的关闭按钮中添加两个方法 ...

  2. ios html清除缓存,iOS开发之1行代码实现缓存计算及清除缓存

    话不多说,直接撸代码 // // gzhCache.h // cache // // Created by 郭志贺 on 2020/5/27. // Copyright © 2020 郭志贺. All ...

  3. 玩转iOS开发 - 数据缓存

    Why Cache 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序 ...

  4. ios html清除缓存图片,iOS利用SDWebImage实现缓存的计算与清理

    一般我们项目中的缓存一般分为2大块:一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了. 实际项目中会配合设置里去清理缓存, 效果截图如下: ...

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

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

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

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

  7. iOS App清除缓存

    缓存 在我们App使用过程中,都会相应的请求网络资源,获取到图片,视频等等资源,并相应地做了缓存等的操作,来使我们的App使用体验更加流程.典型的例子,我们的App中很多都用到了SDWebImage来 ...

  8. ios html清除缓存图片,iOS SDWebImage图片缓存处理

    前言 以前一直使用,也没有花太多时间去看看实现的机制,现在抽时间好好研究一下,只有明白里面的实现才能使用的更顺手,即便出现问题,也能很快定位问题的位置. 导入头文件#import "SDWe ...

  9. ios webview清除缓存

    NSURLCache * cache = [NSURLCache sharedURLCache]; [cache removeAllCachedResponses]; [cache setDiskCa ...

最新文章

  1. UE4创建第一人称射击游戏学习教程
  2. 不计前嫌,握手言和:Microsoft宣布新版SQL Server将同时支持Windows与Linux两大平台...
  3. 北京计算机科学与技术学院,计算机科学与技术学院
  4. 自动化Debias框架,一键去除推荐系统所有Bias
  5. springcloud 之 路由网关 zuul
  6. MATLAB文件操作及读txt文件(fopen,fseek,fread,fclose)
  7. STM32 FreeRTOS系列教程(一)FreeRTOS简介
  8. Autocad ET扩展工具汉化
  9. 修改系统UISearchBar搜索框的样式-搜索图片、背景颜色
  10. 超硬核!十万字c++题,让你秒杀老师和面试官(上)
  11. autojs字符串中提取数字
  12. threejs 三次贝塞尔曲线
  13. picker多选 vant_浅谈vant组件Picker 选择器选单选问题
  14. 【elasticsearch】【Kibana】7.6.2版本kibana启动失败master_not_discovered_exception
  15. STM32F105 UART4 发送异常及解决
  16. K2 blackpearl 安装
  17. 重温电视剧《陆小凤之凤舞九天》
  18. 玩家的numpertpry 对象 中 不仅仅要同步 君主武将的等级,阶级也要同步
  19. vue+elementui,输入框输入特殊字符提示
  20. map_server介绍及参数说明

热门文章

  1. 重症肌无力患者不能吃什么
  2. 去信任外包虚荣地址生成
  3. pandas循环插入行
  4. 【Spring Boot入门】AOP基础及Advice的执行顺序
  5. springboot+springsecurity+阿里云短信服务验证实现注册登录
  6. 挡板门在湿式烟气脱硫系统中是怎样的存在?
  7. 【mysql进阶】MTS主从同步原理及实操指南(七)
  8. 计算机浏览页面,计算机默认网页浏览器怎么设置
  9. 【网络营销】 ——网站搜索引擎友好型分析
  10. 程序员敲诈老板,或面临37年监禁