iOS开发之清除缓存功能的实现_IOS

前言

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

清除缓存基本上都是在设置界面的某一个Cell,于是我们可以把清除缓存封装在某一个自定义Cell中

如下图所示:

实现的具体步骤

使用注意:过程中需要用到第三方库,请提前安装好:SDWebImageSVProgressHUD

1. 创建自定义Cell,命名为GYLClearCacheCell

重写initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法,设置基本内容,如文字等等;

主要代码如下:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
 {
 if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
  // 设置加载视图
  UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
  [loadingView startAnimating];
  self.accessoryView = loadingView;

  //设置文字
  self.textLabel.text = @"清楚缓存";
  self.detailTextLabel.text = @"正在计算";
 }
 return self;
}

2. 计算缓存文件大小

缓存文件包括两部分,一部分是使用SDWebImage缓存的内容,其次可能存在自定义的文件夹中的内容(视频,音频等内容),于是计算要分两部分

主要代码如下:

unsigned long long size =
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"CustomFile"].fileSize;
//fileSize是封装在Category中的。

size += [SDImageCache sharedImageCache].getSize; //CustomFile + SDWebImage 缓存

//设置文件大小格式
NSString sizeText = nil;
if (size >= pow(10, 9)) {
 sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
}else if (size >= pow(10, 6)) {
 sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
}else if (size >= pow(10, 3)) {
 sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
}else {
 sizeText = [NSString stringWithFormat:@"%zdB", size];
}

上述两个方法都是在主线程中完成的,如果缓存文件大小非常大的话,计算时间会比较长,会导致应用卡死,考虑到该问题,因此需要将上述代码放到子线程中完成。

3. 添加手势监听

对于监听点击Cell可以使用代理也可以使用手势监听,为了将完整的功能封装到自定义Cell中,于是我们使用手势监听的方法来监听点击Cell。

//计算完成后,回到主线程继续处理,显示文件大小,除去加载视图,显示箭头,添加点击事件
dispatch_async(dispatch_get_main_queue(), ^{

 self.detailTextLabel.text = [NSString stringWithFormat:@"%@",sizeText];
 self.accessoryView = nil;
 self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

 [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clearCacheClick)]];
 });

4. 清除缓存

清除缓存也是分为两部分,一是清除SDWebImage的缓存,二是清除自定义文件缓存

主要代码如下:

- (void)clearCacheClick
{
 [SVProgressHUD showWithStatus:@"正在清除缓存···"];
 [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];

 [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
  dispatch_async(dispatch_get_global_queue(0, 0), ^{

   NSFileManager *mgr = [NSFileManager defaultManager];
   [mgr removeItemAtPath:GYLCustomFile error:nil];
   [mgr createDirectoryAtPath:GYLCustomFile withIntermediateDirectories:YES attributes:nil error:nil];

   dispatch_async(dispatch_get_main_queue(), ^{

    [SVProgressHUD dismiss];

    // 设置文字
    self.detailTextLabel.text = nil;
   });
  });
 }];
}

注意点:SDWebImage清除缓存是在子线程中进行的,清除自定义文件内容应该也放在子线程中(删除大文件可能比较耗时),为了保证两者不冲突,可以将删除自定义文件内容放在SDWebImage缓存清除完毕之后进行,然后再回到主线程操作。

5. 其他注意点

    a. 在计算文件大小过程中应该是不允许点击Cell的,如果有设置Cell的didSelectRowAtIndexPath方法,那么会导致手势监听不能使用。于是需要在计算时不能点击Cell。

    b. 设置userInteractionEnabled=NO应放在设置文字之后,否则textLabel将显示为灰色。

    c. 当计算文件大小没有结束的时,这个时候点击返回,自定义Cell不会被销毁,他会执行完剩下的代码,可以使用dealloc方法来验证,在此情况下,可以使用弱引用的self来解决。

    d. 当设置界面的cell比较多时,如果还在计算缓存大小时,清除缓存的cell从视图中消失,那么加载视图动画就会被停止,当返回到清除缓存cell时,看不到加载动画。解决方案两种方法:一个是在cell创建的代理方法中重新开启动画;另一个是封装到layoutSubviews方法中。

6. 效果

总结

以上就是关于iOS中清除缓存功能实现的全部内容,希望这篇文章对各位iOS开发者们能有所帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, 清除缓存
清除缓存功能
android 清除缓存功能、ios开发清除缓存、ios开发清除应用缓存、微信开发 清除缓存、app清除缓存功能,以便于您获取更多的相关知识。

时间: 2024-11-18 05:32:47

iOS开发之清除缓存功能的实现_IOS的相关文章

iOS开发之清除缓存

NSFileManager *mgr = [NSFileManager defaultManager]; NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; [mgr removeItemAtPath:cachePath error:nil];

浅析IOS开发TouchID指纹解锁功能_IOS

效果图如下 实现过程 1.首先引入指纹解锁必须的头文件 #import <LocalAuthentication/LocalAuthentication.h> 2.了解下主要的两个方法 这个方法是判断设备是否支持TouchID的. - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none))); 这个是用来验证TouchI

iOS开发定时器的三种方法分享_IOS

前言 在开发中,很多时候我们需要用到定时器实时刷新某个数值.这个时候我们就需要用到定时器,这里,我为大家推荐三种方法,分别是:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法.希望能帮到大家. 一.NSTimer(一般用于定时的更新一些非界面上的数据) 1. 创建方法 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:

iOS开发之微信聊天工具栏的封装_IOS

微信大家基本上都用过,今天要做的就是微信的聊天工具条.聊天工具条还是比较复杂的,其中包括发送表情,发送文字,发送图片,发送声音,拍照等等功能,下面给出发送录音,文字,表情的代码,其他的和这几样类似.还是那句话百字不如一图,先来几张效果图吧. 在封装聊天工具条的的时候表情键盘是之前封装好的,所以拿过来就可以用的啦.因为不管是工具条还是表情键盘都是用约束来控件大小的,所以横屏也是没问题的,在大屏手机上也是没问题的.下面将会一步步讲解如何封装下面的聊天工具条.主要是对工具条的封装,表情键盘在这就不做讲

IOS开发之路--C语言基础知识_IOS

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

提高iOS开发效率的小技巧与思路_IOS

先用一张图展示学习iOS开发应该掌握的知识体系: 1.全图片作为背景的时候,可能遇到的问题.,滑回的时候,图片停留了一会才滑回去. 原因: 这种界面一般使用一般用imageView的第三种填充方式. 这种填充方式可以让图片不被压缩变形的前提下,尽可能去填充整个控件,但是设置这个枚举的填充方式的时候,记得按照下图这样设置,将超出控件范围的给切割掉 设置约束的时候,记得选择currentview的那个对象 2.设备适配的问题 还是上面这张图片,按照设计在6p上面来设置自动约束,约好后,在5s上面的时

iOS开发之通过银行卡号获取所属银行名称_IOS

废话不多说了,直接给大家贴代码了,具体代码如下所示: #pragma mark - 根据银行卡号判断银行名称 + (NSString *)getBankName:(NSString*) cardId{ //发卡行.卡种名称 NSArray *bankName = @[@"邮储银行·绿卡通", @"邮储银行·绿卡银联标准卡", @"邮储银行·绿卡银联标准卡" , @"邮储银行·绿卡专用卡" , @"邮储银行·绿卡银联标

微信6.0.2全新发布,iOS版增加清理缓存功能

12月25日消息,iOS.Android微信相继升级到6.0.2正式版,新增功能不少,不过虽然版本号完全一样, 但是更新内容相差很大.iOS版本的最新微信增加了"清理微信缓存,快捷查看和删除占空间的大文件"功能. 微信6.0.2iOS版本新增功能:1.视频聊天窗口可以缩小.2.可以设置微信字体大小,但这里使用的是滑块拖动方式,而且菜单字体也会同时跟着变化.3.用小视频拍摄夜景,增加"加亮模式".4.在iOS,8下,可以将系统相册.Safari浏览器中的内容直接分享到

微信6.0.2全新发布iOS版增加清理缓存功能

12月25日消息,iOS.Android微信相继升级到6.0.2正式版,新增功能不少,不过虽然版本号完全一样,但是更新内容相差很大.iOS版本的最新微信增加了清理微信缓存,快捷查看和删除占空间的大文件功能. 微信6.0.2iOS版本新增功能:1.视频聊天窗口可以缩小.2.可以设置微信字体大小,但这里使用的是滑块拖动方式,而且菜单字体也会同时跟着变化.3.用小视频拍摄夜景,增加加亮模式.4.在iOS 8下,可以将系统相册.Safari浏览器中的内容直接分享到微信.5.清理微信缓存,快捷查看和删除占