iOS 清理文件缓存

本文摘自:《msp的昌伟哥哥-iOS开发-清理缓存功能的实现》摘下来的目的就是为了能够学习。还望看到文章的同学,前往原创的博客园。感谢msp的昌伟哥哥的分享精神。

移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage。

但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯、购物、阅读类app的标配功能。

今天介绍的离线缓存功能的实现,主要分为缓存文件大小的获取、删除缓存文件的实现。

获取缓存文件的大小

由于缓存文件存在沙箱中,我们可以通过NSFileManager API来实现对缓存文件大小的计算。

计算单个文件大小

+(float)fileSizeAtPath:(NSString *)path{
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if([fileManager fileExistsAtPath:path]){
        long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;
        return size/1024.0/1024.0;
    }
    return 0;
}

计算目录大小

+(float)folderSizeAtPath:(NSString *)path{
    NSFileManager *fileManager=[NSFileManager defaultManager];
    float folderSize;
    if ([fileManager fileExistsAtPath:path]) {
        NSArray *childerFiles=[fileManager subpathsAtPath:path];
        for (NSString *fileName in childerFiles) {
            NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
            folderSize +=[FileService fileSizeAtPath:absolutePath];
        }     //SDWebImage框架自身计算缓存的实现
        folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0;
        return folderSize;
    }
    return 0;
}

清理缓存文件

同样也是利用NSFileManager API进行文件操作,SDWebImage框架自己实现了清理缓存操作,我们可以直接调用。

+(void)clearCache:(NSString *)path{
    NSFileManager *fileManager=[NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:path]) {
        NSArray *childerFiles=[fileManager subpathsAtPath:path];
        for (NSString *fileName in childerFiles) {
            //如有需要,加入条件,过滤掉不想删除的文件
            NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
            [fileManager removeItemAtPath:absolutePath error:nil];
        }
    }
    [[SDImageCache sharedImageCache] cleanDisk];
}

实现效果:

时间: 2025-01-17 08:35:29

iOS 清理文件缓存的相关文章

iOS 之 文件缓存

对于信息量不是太大的数据,可以使用文件缓存来处理.文件缓存可以缓存字典和数组. 步骤一:创建路径 路径要一级一级往下创建,基本不用考虑创建失败的情况.但是如果创建失败了要怎么做呢?按道理应该提示出来.结束往下的操作,因为没有办法继续创建下面的目录. 创建路径要放到~Document下面,在真机上才能运行. 创建路径只是目录,文件名称还要在读写时附加上. 步骤二:读写

iOS 清理应用缓存

一段清理缓存的代码如下: dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) , ^{ NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0]; NSArray *files = [[NSFileManager defa

iOS清理缓存的几种方法

iOS清理缓存的几种方法,有需要的朋友可以参考下: 1.计算文件大小: - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manager = [NSFileManager defaultManager]; if ([manager fileExistsAtPath:filePath]){ return [[manager attributesOfItemAtPath:filePath error:nil] file

iOS开发—清除缓存

iOS开发—清除缓存 一.修改了系统的头文件 报错示例: fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSArray.h' has been modified si

麦子学院ios笔记:IOS把图片缓存到本地的几种方法

把ios的图片缓存到本地的方法有几种?现在来看看学生在麦子学院学习ios开发的笔记中有讲到哪几种方法呢? <code>把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. </code> 一.把图片转为base64的字符串存到数据库中或者plist文件中,然后用到的时候再取出来 <code class="hljs" obje

玩转iOS开发 - 数据缓存

Why Cache 有时候.对同一个URL请求多次,返回的数据可能都是一样的,比方server上的某张图片.不管下载多少次,返回的数据都是一样的. 上面的情况会造成下面问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题.一般考虑对数据进行缓存. 数据缓存 为了提高程序的响应速度,能够考虑使用缓存(内存缓存\硬盘缓存)r 第一次请求数据时,内存缓存中没有数据.硬盘缓存中没有数据. 缓存数据的过程: ? 当server返回数据时,须要做下面步骤 (1)使用server的数据(比方解

五、清理mac缓存和关闭后台运行程序

一.清理mac 缓存  1.用鼠标点击桌面,然后按快捷键Command+Shift+G前往文件夹 2.输入路径:~/Library/Caches/ 3.清除所有的数据,把所有的Caches文件夹得都行都删除 二.关闭后台运行程序 1.打开Launchpad中的活动监视器 2.双击可以退出,正在运行的程序

Linux设置DNS地址及清理DNS缓存方法

1.设置DNS地址 编辑vim /etc/resolv.conf 文件. 增加DNS地址:nameserver ip. 2.清理DNS缓存 清理dns缓存: 通过重启nscd服务来达到清理dns缓存的目的 如果没有nscd服务,先用yum安装: yum install nscd -y

清理系统缓存

清理系统缓存当服务器内存使用率高达90%以上时,且有较大耗内存操作时,可以考虑把系统的垃圾内存清理掉.方法如下 echo 3 > /proc/sys/vm/drop_caches ~ # free total   used     free  shared   buffersMem:   155728   119840   35888     176  28-/+ buffers:     119812   35916Swap: 0 0 0~ # echo 3 > /proc/sys/vm/d