iOS利用SDWebImage实现缓存的计算与清理
来源:互联网 发布:客服系统源码 编辑:程序博客网 时间:2024/06/01 20:12
一般我们项目中的缓存一般分为2大块:一个是自己缓存的一些数据;还有一个就是我们使用的SDWebImage这个第三方库给我们自动缓存的图片文件缓存了.
实际项目中会配合设置里去清理缓存, 效果截图如下:
一、实现功能
1、仅仅清理图片缓存
2、清理所有缓存文件
二、程序实现
1、仅仅清理图片缓存
如果你只想清理图片缓存,且是用SDWebImage加载的网络图片,那么你可以用SDWebImage内部封装方法清除图片缓存.
导入头文件:
1
#import <SDImageCache.h>
获取缓存图片大小并异步清除图片缓存:
1
2
3
4
5
6
7
8
//获取缓存图片的大小(字节)
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计算并清理缓存:
计算单个文件大小:
1
2
3
4
5
6
7
8
+ (
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提供的方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+ (
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. 清除缓存:
1
2
3
4
5
6
7
8
9
10
11
12
+ (
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];
}
然后只需要在所使用的控制器里调取计算和清理缓存的方法即可:
1
2
3
4
5
6
// 计算缓存大小
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
float
size = [CleanCaches folderSizeAtPath:cachesDir];
// 清理缓存
[CleanCaches clearCache:cachesDir];
三、压缩文件截图及运行效果
1、压缩文件截图
2、运行时的截图
四、其他补充
界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行! 也可以把工具类直接拖到自己项目里使用!
如需看详情版,请到这里下载!
阅读全文
0 0
- iOS利用SDWebImage实现缓存的计算与清理
- iOS 计算SDWebImage本地缓存图片大小+清理本地缓存的图片
- iOS开发:利用SDWebImage实现图片加载与缓存
- SDWebImage异步加载图片及缓存的管理与清理
- SDWebImage异步加载图片及缓存的管理与清理
- SDWebImage异步加载图片及缓存的管理与清理
- SDWebImage异步加载图片及缓存的管理与清理
- SDWebImage异步加载图片及缓存的管理与清理
- IOS计算清理缓存
- iOS 实现缓存清理
- SDWebImage计算缓存值与清除缓存
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS开发-清理缓存功能的实现
- iOS清理缓存的简单实现
- iOS开发-清理缓存功能的实现
- 7-1 畅通工程之局部最小花费问题(35 分)
- 每秒处理10万订单乐视集团支付架构
- HashMap和Hashtable的区别
- 第十二周项目1-验证算法(3)
- 3-7 类的友元函数的应用
- iOS利用SDWebImage实现缓存的计算与清理
- Capsule Networks
- echarts自动适应屏幕大小
- lua中的for
- 机器学习算法-KNN(一)
- Andrpid 跳转 百度地图/高德地图 导航
- 图结构 prim算法
- 第12周项目1-Prim算法的验证
- Ngin搭建图片服务器