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

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

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

1、获取缓存文大小
-( float )readCacheSize
{
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES) firstObject];

return [ self folderSizeAtPath :cachePath];
}

2、清除缓存
- (void)clearFile
{
    NSString * cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES ) firstObject];
    NSArray * files = [[NSFileManager defaultManager ] subpathsAtPath :cachePath];
    for ( NSString * p in files) {
        NSError * error = nil ;
        // 获取文件全路径
        NSString * fileAbsolutePath = [cachePath stringByAppendingPathComponent :p];
        
        if  ([[NSFileManager defaultManager ] fileExistsAtPath :fileAbsolutePath])  {
            [[NSFileManager defaultManager ] removeItemAtPath :fileAbsolutePath error :&error];
        }
    }
}

由于缓存文件存在沙箱中,我们可以通过NSFileManager API来实现对缓存文件大小的计算。
// 遍历文件夹获得文件夹大小,返回多少 M
- ( float ) folderSizeAtPath:( NSString *) folderPath

{

    NSFileManager * manager = [NSFileManager defaultManager];

    if (![manager fileExistsAtPath :folderPath]) return 0 ;

NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
    NSString * fileName;
    long long folderSize = 0 ;
    while ((fileName = [childFilesEnumerator nextObject]) != nil ) {
        // 获取文件全路径
        NSString * fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
        folderSize += [ self fileSizeAtPath :fileAbsolutePath];
    }

    return folderSize/( 1024.0 * 1024.0);
}

// 计算 单个文件的大小
- ( long long ) fileSizeAtPath:( NSString *) filePath

{
    NSFileManager * manager = [NSFileManager defaultManager];
    if  ([manager fileExistsAtPath :filePath]) {

return [[manager attributesOfItemAtPath :filePath error : nil] fileSize];
    }

return 0;
}

最新文章

  1. AngularJS表达式
  2. SQL转换时间的时分
  3. Hadoop各商业发行版之比较
  4. Redis的简介与安装
  5. 判断 0 和 '' 以及 empty null false的关系
  6. max_input_vars 的影响
  7. python使用简单http协议来传送文件
  8. Android Non-UI to UI Thread Communications(Part 2 of 5)
  9. mysql 误删除ibdata1之后如何恢复
  10. java类构造器的理解
  11. ios电话监听状态
  12. 快学Scala之特质
  13. Jenkins 使用Tfs 插件出现 MappingConflictException 错误问题解决
  14. Linux 基本使用
  15. (Swiftmailer)高效的PHP邮件发送库
  16. 理解JSON Web Token (一)
  17. python批量解析域名a记录
  18. sql server 压缩备份数据库
  19. Android UI/UX 工具
  20. java多线程 基础demo

热门文章

  1. js上 四、数据类型转换
  2. 移动端 better-scroll基础
  3. Python制作折线图
  4. NET 5 Session、Cookie和Cache的使用
  5. 记一次Ajax请求MVC调优
  6. js中Tabs插件打开的标签页过多自动关闭
  7. 微信小说分销系统设计之使用百度Echarts地图统计功能统计微信粉丝地域分布情况
  8. sql中筛选条件为空值
  9. 在wildfly 21中搭建cluster集群
  10. 解决在Filter中读取Request中的流后, 然后再Control中读取不到的做法