ios html清除缓存图片,iOS利用SDWebImage实现缓存的计算与清理

该博客介绍了如何在iOS项目中实现缓存管理,包括使用SDWebImage库清理图片缓存和整体缓存文件。提供了计算缓存大小、清理图片缓存以及清理全部缓存的代码实现,并展示了运行效果。通过引入CleanCaches工具类,可以方便地进行缓存的计算和清理操作。
摘要由CSDN通过智能技术生成

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

实际项目中会配合设置里去清理缓存, 效果截图如下:

7e3436717cd5fd29883394364b69bce6.png

一、实现功能

1、仅仅清理图片缓存

2、清理所有缓存文件

二、程序实现

1、仅仅清理图片缓存

如果你只想清理图片缓存,且是用SDWebImage加载的网络图片,那么你可以用SDWebImage内部封装方法清除图片缓存.

导入头文件:

#import

获取缓存图片大小并异步清除图片缓存:

//获取缓存图片的大小(字节)

NSUInteger bytesCache = [[SDImageCache sharedImageCache] getSize];

//换算成 MB (注意iOS中的字节之间的换算是1000不是1024)

float MBCache = bytesCache/1000/1000;

//异步清除图片缓存 (磁盘中的)

dispatch_async(dispatch_get_global_queue(0, 0), ^{

[[SDImageCache sharedImageCache] clearDisk];

});

2、清理所有缓存文件

如果你想清理所有的缓存文件(包括图片、视频、音频等), 那你可以用如下方法。需要你把caches的路径传过去,然后计算caches文件夹下内容的大小,然后根据其大小再判断是否清除缓存。(根据路径删除文件或文件夹)

为了让代码看起来更整洁,这里将缓存的计算及清理封装自定义一个工具类CleanCaches.

利用SDWebImage计算并清理缓存:

计算单个文件大小:

+ (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;

}

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

+ (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 += [self fileSizeAtPath:absolutePath];

}

// SDWebImage框架自身计算缓存的实现

folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0;

return folderSize;

}

return 0;

}

3. 清除缓存:

+ (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];

}

然后只需要在所使用的控制器里调取计算和清理缓存的方法即可:

// 计算缓存大小

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachesDir = [paths objectAtIndex:0];

float size = [CleanCaches folderSizeAtPath:cachesDir];

// 清理缓存

[CleanCaches clearCache:cachesDir];

三、压缩文件截图及运行效果

1、压缩文件截图

9c8ce8939afbb8d91bb37bc4e4f93446.png

2、运行时的截图

472a8d335ae7b2097e10c91ca9c98199.png

四、其他补充

界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行! 也可以把工具类直接拖到自己项目里使用!

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值