iOS开发-清理缓存功能的实现

移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为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];
}

实现效果:

时间: 2024-12-28 02:06:13

iOS开发-清理缓存功能的实现的相关文章

ios开发--清理缓存

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

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开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微信支付的网址是: https://pay.weixin.qq.com/wiki/doc/api/index.html 进去之后,我们可以看到网页,但我接下来主要讲的是app支付 app支付的过程:商业app通过集成微信SDK,用户解析后跳转到微信内软件支付的过程. 点进去app支付: 我们可以看到A

iOS 清理缓存功能实现第一种方法

1 添加一个提示框效果导入第三方MBProgressHUD #import "MBProgressHUD+MJ.h" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <br><br>/**  *  清理缓存第一种方法  */ -(void)clearCache { dispatch_async(                dispatch_get_global_queue(DISP

iOS 清理缓存功能的实现第二种方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 /**  *  清理缓存第二种方法  *  *  @param sender <#sender description#>  */ - (void)clearCache:(id)sender {     //彻底清除

iOS开发 数据缓存-数据库

iOS中数据存储方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding (NSKeyedArchiver\NSkeyedUnarchiver) SQlite3 Core Date Plist.Preference.NSCoding的存储方式 详见 iOS开发 文件存储方式 数据库的存储方式 Core Date:Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将O

iOS开发 - 网络&amp;数据库功能综述

学习经验尚浅,以前iOS开发一直停留在单机版的开发,但是现在如果一个移动端开发完全抛弃网络功能,它也不会存在很久.网上讲的关于iOS的网络部分都比较专一,这两天经过融合和总结,大致摸索出了一套整体流程,在此和对网络连接不甚明了的同学分享,本文不涉及技术层面,只是概念的串通. 前提注:如果你真的只是开发一个单机版app也或者公司已经将网络数据封装好给你个接口or XML格式等文件用而且也不想知道的话就请华丽丽地忽视我吧. 一.前提概览 首先,要考虑app所在的大环境是个什么级别的环境,我大致将环境

玩转iOS开发 - 数据缓存

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

iOS开发网络缓存原理

一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器的数据(比如解析.显示) (