ios清理缓存之封装清理缓存cell

这篇文章主要介绍<ios清理缓存>方面的知识.主要为刚接触ios的小白提供思路,有误之处请大家多多指教--->>>新鲜出炉的.

1,清理缓存个人理解
有个很牛逼的加载图片的框架SDWebImage,大家应该都知道的.我也看过很多人写的清理缓存就是清理SDWebImage里面的缓存,那么如果我们系统里面有除了图片之外的加载了???SDWebImage就不可能帮助你完成你需要的计算了,因为框架内部"com.hackemist.SDWebImageCache"这个地址进行清理缓存.那么我们自己的网页缓存和视频缓存还是清理不了,所以清理缓存如果是用了SDWebImage框架必须清理两部分(自己的缓存和SDWebImage的缓存),若果不用框架就直接清理自己的缓存就行了.

2,先看看效果,我主要用的是系统的tableViewCell控件做的,大家可以根据自己的喜好加以修改:

计算清理缓存.png
缓存计算完成.png
缓存删除完成.png

3,封装获取缓存的文件的大小

    //总大小
    unsigned long long size = 0;
    
    //获取管理文件的对象
    NSFileManager *manager = [NSFileManager defaultManager];
    
    //判断是否是文件还是文件夹
    BOOL isDirectory = NO;
    
    //获取文件夹是否存在
    BOOL exists = [manager fileExistsAtPath:self isDirectory:&isDirectory];
    
    if (!exists) return size;
    
    if (isDirectory) {
        
        //获得文件的大下
        NSDirectoryEnumerator *enumerator = [manager enumeratorAtPath:self];
        
        //遍历文件遍历器
        for (NSString *subpath in enumerator) {
            
            //全路径
            NSString *fullPath = [self stringByAppendingPathComponent:subpath];
            
            //累加文件夹中所有文件的大小
            size += [manager attributesOfItemAtPath:fullPath error:nil].fileSize;
            
        }
    
    }else{
        
        //获取文件的大小
        size = [manager attributesOfItemAtPath:self error:nil].fileSize;
        
    }

4,封装清理缓存的cell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

        //设置cell右边的指示器(用来说明正在处理事情)
        UIActivityIndicatorView *indicatorView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
        
        //开启菊花
        [indicatorView startAnimating];
        
        //设置cell的accessoryView
        self.accessoryView = indicatorView;
        
        //设置cell的默认显示文字
        self.textLabel.text = @"清除缓存(正在计算缓存大小...)";
        
        //取消用户点击监听
        self.userInteractionEnabled = NO;
        
        __weak typeof(self) weakself = self;
        
       //计算文件的打下
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
           
            //计算缓存文件的大小是耗时操作,最好放在子线程中执行
            unsigned long long size = @"/Users/bobo/Desktop/text".cacheFileSize;
            
            //SDImageCache的缓存大小
           //[SDImageCache sharedImageCache].getSize是SDImageImage框架获取它自己加载的缓存大小,有兴趣的同学可以进文件看下.
            size += [SDImageCache sharedImageCache].getSize;
            
            //如果cell已经销毁就直接返回
            if (weakself == nil) return ;
            
            //获取转换后的size大小
            //cacheTextForSize这个转换大家就去自己动手写写吧,用pow写很简单,不做详细介绍了
            NSString *cellText = [weakself cacheTextForSize:size];
            
/**
之所以用异步线程,因为计算文件大小是耗时操作文门应该放到子线程中,不能影响UI的显示.
*/
            //主线程做UI工作
            dispatch_async(dispatch_get_main_queue(), ^{
            
                //设置文字
                weakself.textLabel.text = cellText;
                
                //size计算完成后,设置accessoryView为空
                weakself.accessoryView = nil;
                
                //重新设置cell的右边为箭头状态
                weakself.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
           
                UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clearCache)];;
                [ weakself addGestureRecognizer:tap];
                
                //状态完成后,回复点击效果
                self.userInteractionEnabled = YES;
            });
            
        }); 
    }
    return self;
}

5,清理缓存


//清理缓存
- (void)clearCache{
    
    __weak typeof(self)weakself = self;

    //显示提醒
    [SVProgressHUD showWithStatus:@"正在清理缓存..."];
    [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
    
    //删除SDImage的缓存
  //clearDiskOnCompletion这里用这个完成Block主要是因为SDImageCache的clearDisk方法是异步子线程,我们的dispatch_get_global_queue也是异步子线程,这也可能造成主线程卡死.所以选在先让框架的删除,在做自己的事情.
    [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
        
        //清除自定义路径下的文件内容
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
           
            NSFileManager *manager = [NSFileManager defaultManager];
            
            //移除缓存文件
            [manager removeItemAtPath:cacheFilePath(customFilePath) error:nil];
            
            //创建缓存文件
            [manager createDirectoryAtPath:cacheFilePath(customFilePath) withIntermediateDirectories:YES attributes:nil error:nil];
            
            dispatch_async(dispatch_get_main_queue(), ^{
               
                //移除提示
                [SVProgressHUD dismiss];

                //重新设置文字
                weakself.textLabel.text = @"清除缓存(0B)";
            });
        });
    }];
}

6,细节处理
在上面我们用到了UIActivityIndicatorView,那么问题来了.当我们把tableView上下滑动的时候的,cell的UIActivityIndicatorView会消失不见.这是问什么了?
这是因为动画效果导致的,解决办法就是在每次cell出现的时候拿到UIActivityIndicatorView,让它开始动画就行了.

 //cell每次出现的页面都会调用这个方法,取出这个indicatorView刷新UI界面
    UIActivityIndicatorView *indicatorView = (UIActivityIndicatorView *)self.accessoryView;
    [indicatorView startAnimating];

7,结束语
这就是我总结的清理缓存的知识,希望可以帮到大家.如有问题欢迎联系我,我会第一时间回答大家的问题.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • TCP 协议 一种面向连接的、可靠的、基于字节流传输层通信协议 TCP被认为是最稳定的协议,因为它具有以下几个特点...
    Jinwong阅读 455评论 0 3
  • 世界上的数据分析师分为两类,使用Excel的分析师,和其他分析师。 每一个数据新人的入门工具都离不开Excel。因...
    习惯研究所所长阅读 739评论 0 1
  • 随着越来越多的95后迈入大学的校门,90后逐渐失去了安逸的生活,开始向着奋斗的“社会人”过度着。 那些曾经的新新人...
    玉吻天荒阅读 831评论 0 1
  • 应该先画蛋糕,再画盘子,::>_<::自己画悔了,不过下次就记住了,想吃蛋糕了(>﹏<)
    哗啦啦的小河流水阅读 135评论 1 1