当前位置: 首页 > 编程笔记 >

iOS中的缓存计算和清除完整实例代码

丰佐
2023-03-14
本文向大家介绍iOS中的缓存计算和清除完整实例代码,包括了iOS中的缓存计算和清除完整实例代码的使用技巧和注意事项,需要的朋友参考一下

1.首先,一般我们项目中的缓存一般分为2大块,一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了

<1>怎么计算缓存大小(主要是利用系统提供的NSFileManager类来实现)

$1.单个文件大小的计算

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

$2.文件夹大小的计算(要利用上面的$1提供的方法)

-(float)folderSizeAtPath:(NSString *)path{
  NSFileManager *fileManager=[NSFileManager defaultManager];
  NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
  cachePath=[cachePath stringByAppendingPathComponent:path];
  long long folderSize=0;
  if ([fileManager fileExistsAtPath:cachePath])
  {
    NSArray *childerFiles=[fileManager subpathsAtPath:cachePath];
    for (NSString *fileName in childerFiles)
    {
      NSString *fileAbsolutePath=[cachePath stringByAppendingPathComponent:fileName];
      long long size=[self fileSizeAtPath:fileAbsolutePath];
      folderSize += size;
      NSLog(@"fileAbsolutePath=%@",fileAbsolutePath);

    }
    //SDWebImage框架自身计算缓存的实现
    folderSize+=[[SDImageCache sharedImageCache] getSize];
    return folderSize/1024.0/1024.0;
  }
  return 0;
}

其中folderSize+=[[SDImageCache sharedImageCache] getSize];这行代码是SDWebImage给我们提供的计算本地缓存图片大小的方法....(当然了,这个方法的底层实现依然是用的NSFileManager做的)

上面2个方法结合起来使用,就可以计算我们总共产生多少缓存啦....

2.计算好了缓存,那么怎么清除呢??

//同样也是利用NSFileManager API进行文件操作,SDWebImage框架自己实现了清理缓存操作,我们可以直接调用。
-(void)clearCache:(NSString *)path{
  NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
  cachePath=[cachePath stringByAppendingPathComponent:path];

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

上面再清楚换存的时候也清除了2块地方,一个是我们自己缓存的文件夹;还有就是SDWebImage给我们缓存的图片文件....

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍IOS 缓存文件的清除实现代码,包括了IOS 缓存文件的清除实现代码的使用技巧和注意事项,需要的朋友参考一下 移动互联网 APP 的应用开发,必须要时刻注意用户体验,以免造成APP 或者手机及其他移动设备的卡死情况,以下是对缓存文件的处理。 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage。 但是,离线缓存会占用

  • 本文向大家介绍CodeIgniter启用缓存和清除缓存的方法,包括了CodeIgniter启用缓存和清除缓存的方法的使用技巧和注意事项,需要的朋友参考一下 Codeigniter支持缓存技术,以达到最快的速度。尽管CI已经相当高效了,但是网页中的动态内容、主机的内存CPU和数据库读取速度等因素直接影响了网页的加载速度。依靠网页缓存,你的网页可以达到近乎静态网页的加载速度,因为他们将程序输出的结果保

  • void clear_cache(string template [, string cache id [, string compile id [, int expire time]]]) This clears the cache for a specific template. If you have multiple caches for this template, you can cl

  • 本文向大家介绍Vue.js实现的计算器功能完整示例,包括了Vue.js实现的计算器功能完整示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Vue.js实现的计算器功能。分享给大家供大家参考,具体如下: 1. HTML部分代码 2. CSS部分代码 3. 使用本站HTML/CSS/JS在线运行测试工具:http://tools.jb51.net/code/HtmlJsRun,可得到如下测

  • 本文向大家介绍Spring整合Redis完整实例代码,包括了Spring整合Redis完整实例代码的使用技巧和注意事项,需要的朋友参考一下 做过大型软件系统的同学都知道,随着系统数据越来越庞大,越来越复杂,随之带来的问题就是系统性能越来越差,尤其是频繁操作数据库带来的性能损耗更为严重。很多业绩大牛为此提出了众多的解决方案和开发了很多框架以优化这种频繁操作数据库所带来的性能损耗,其中,尤为突出的两个

  • 问题内容: 我试图按照此处的建议从缓存中删除模块。 在文档中,我们阅读: require.cache 目的 需要时将模块缓存在此对象中。 通过从该对象中删除键值,下一个require将重新加载模块。 因此,我创建了一个包含一行的名为的文件: 然后我需要通过外壳: 那么,为什么不返回时,我的文件中包含和清除缓存? 进行调试时,我发现有一个对象在执行时未清除。 问题答案: 只是公开的缓存对象引用,不会