博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发-清理缓存功能的实现
阅读量:5017 次
发布时间:2019-06-12

本文共 1733 字,大约阅读时间需要 5 分钟。

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

 

 

实现效果:

 

 

转载于:https://www.cnblogs.com/mantgh/p/4317855.html

你可能感兴趣的文章
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE
查看>>
SQLite剖析之编程接口详解
查看>>
Elasticsearch最佳实践之分片使用优化
查看>>
Java入门(6)
查看>>
更具体的描述JNI
查看>>
数据库——SQL-SERVER练习(6) 数据库安全性
查看>>
Frameset 两页面互调控件技术案例
查看>>
ruby 构建API接口流程代码
查看>>
ASP.NET没有魔法——第一个ASP.NET应用《MyBlog》
查看>>
java web 插件式开发
查看>>
软件工程周总结12
查看>>
DDL对表的操作
查看>>
flutter key
查看>>
iOS 开发常见函数
查看>>
Android: NDK编程入门笔记
查看>>
深刻理解Linux进程间通信(IPC)
查看>>
windows 7中添加新硬件的两种方法(本地回环网卡)
查看>>
javascript 高级程序设计学习笔记(面向对象的程序设计) 2
查看>>
支配集,点覆盖集,点独立集之间的联系
查看>>
SetCapture ReleaseCapture
查看>>