绝大多数应用中都存在着清楚缓存的功能,形形*,各有千秋,现为大家介绍一种最基础的清除缓存的方法。清除缓存基本上都是在设置界面的某一个Cell,于是我们可以把清除缓存封装在某一个自定义Cell中,如下图所示:
具体步骤
使用注意:过程中需要用到第三方库,请提前安装好:SDWebImage、SVProgressHUD。
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. 使用
创建GYLSettingViewController继承自UITableViewController;首先为自定义Cell注册;其次在数据源方法中使用自定义Cell;具体代码如下:
#import "GYLSettingViewController.h"
#import "GYLClearCacheCell.h"
@implementation GYLSettingViewController
static NSString * const GYLClearCacheCellID = @"ClearCache";
static NSString * const GYLSettingCellID = @"Setting";
- (instancetype)init
{
return [self initWithStyle:UITableViewStyleGrouped];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = GYLBGColor;
self.navigationItem.title = @"设置";
[self.tableView registerClass:[GYLClearCacheCell class] forCellReuseIdentifier:GYLClearCacheCellID];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:GYLSettingCellID];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 0) {
return [[GYLClearCacheCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:GYLClearCacheCellID];
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:GYLSettingCellID];
cell.textLabel.text = [NSString stringWithFormat:@"section-%zd,row--%zd",indexPath.section,indexPath.row];
return cell;
}
@end
7. 效果
计算文件大小
正在清除缓存
清除完毕
总结
以上所述是小编给大家介绍的iOS中设置清除缓存功能的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# ios
# 清除缓存功能
# iOS开发之清除缓存功能的实现
# iOS中的缓存计算和清除完整实例代码
# iOS清除所有缓存的实例代码
# IOS 缓存文件的清除实现代码
# IOS获取缓存文件的大小并清除缓存文件的方法
# iOS 清除xcode缓存和生成文件的方法
# iOS开发之1行代码实现缓存计算及清除缓存
# 自定义
# 是在
# 可以使用
# 放在
# 加载
# 两部分
# 在此
# 方法来
# 装在
# 小编
# 过程中
# 就会
# 还在
# 一是
# 两种
# 各有千秋
# 我们可以
# 他会
# 给大家
# 然后再
相关文章:
实例解析angularjs的filter过滤器
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
javascript基本数据类型及类型检测常用方法小结
创业网站制作流程,创业网站可靠吗?
如何通过NAT技术实现内网高效建站?
建站之星导航配置指南:自助建站与SEO优化全解析
建站之星2.7模板快速切换与批量管理功能操作指南
建站主机选哪家性价比最高?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在Golang中引入测试模块_Golang测试包导入与使用实践
北京网站制作网页,网站升级改版需要多久?
独立制作一个网站多少钱,建立网站需要花多少钱?
怀化网站制作公司,怀化新生儿上户网上办理流程?
如何制作网站标识牌,动态网站如何制作(教程)?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何在阿里云通过域名搭建网站?
Thinkphp 中 distinct 的用法解析
重庆网站制作公司哪家好,重庆中考招生办官方网站?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
教学论文网站制作软件有哪些,写论文用什么软件
?
详解jQuery中基本的动画方法
网站制作难吗安全吗,做一个网站需要多久时间?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何高效利用200m空间完成建站?
,怎么用自己头像做动态表情包?
太原网站制作公司有哪些,网约车营运证查询官网?
如何通过.red域名打造高辨识度品牌网站?
常州企业网站制作公司,全国继续教育网怎么登录?
高防服务器:AI智能防御DDoS攻击与数据安全保障
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
广州建站公司哪家好?十大优质服务商推荐
如何快速登录WAP自助建站平台?
建站之星代理平台如何选择最佳方案?
小型网站制作HTML,*游戏网站怎么搭建?
建站为何优先选择香港服务器?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
linux top下的 minerd 木马清除方法
c# 在ASP.NET Core中管理和取消后台任务
建站主机类型有哪些?如何正确选型
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何在景安服务器上快速搭建个人网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
建站DNS解析失败?如何正确配置域名服务器?
建站之星如何修改网站生成路径?
如何配置IIS站点权限与局域网访问?
企业微网站怎么做,公司网站和公众号有什么区别?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何通过西部数码建站助手快速创建专业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。