ios开发中如何有效的清除文件缓存?
程序员文章站
2022-08-21 13:34:35
ios开发中如何有效的清除文件缓存?在有一些应用中应该都会有一些缓存是保存在磁盘中的,然后应用也会去提供清除缓存的按钮,而且还会告诉你缓存现在有多大。
那么我们是如何去得到缓存大小的呢,如何去清除?...
ios开发中如何有效的清除文件缓存?在有一些应用中应该都会有一些缓存是保存在磁盘中的,然后应用也会去提供清除缓存的按钮,而且还会告诉你缓存现在有多大。
那么我们是如何去得到缓存大小的呢,如何去清除? 首先我们要明确既然要得到缓存的大小,那么我们肯定需要去得到文件的大小
但是这里需要注意的是文件夹本身是没有文件大小这个属性的,可能会有疑问了,但是我右键可以查看,那个是通过计算文件夹中
的文件去计算出来的。在ios中我们想操纵文件的话是需要去用到一个类的就是nsfilemanager,我们如果直接去获取文件夹的大小是获取
不到的,准备的说是nsfilesize对应的值不对,但是如果通过获取文件的大小是获取的到的,如下所示
//获取文件管理者 nsfilemanager * mgr = [nsfilemanager defaultmanager]; //获取缓存路径 nsstring * string = @"文件路径"; nsdictionary * attrs = [mgr attributesofitematpath:string error:null]; nslog(@"%@",attrs); //获取文件夹中的所有的直接内容 nsarray * contents = [mgr contentsofdirectoryatpath:string error:null];
我们可以给nsstring增加一个分类去计算文件夹的大小
-(nsinteger)filesize { nsfilemanager * mgr = [nsfilemanager defaultmanager]; //判断是否为文件夹的一个标记 bool isdirectory = no; //isdirectory传入进去,取出的如果是yes就是文件夹 bool exists = [mgr fileexistsatpath:self isdirectory:&isdirectory]; //判断文件或者文件夹存不存在 if(exists==no) { return 0; } //如果是一个文件夹,我们就去遍历caches中的所有的内容包括直接和间接的内容 if(isdirectory) { nsarray * subpaths = [mgr subpathsatpath:self]; nsinteger totalbytesize =0; for(nsstring * subpath in subpaths) { //获取全路径 nsstring * fullsubpath = [self stringbyappendingpathcomponent:subpath]; //判断是否为文件 bool isdirectory = no; //表示是文件 if(isdirectory==no) { totalbytesize+=[[mgr attributesofitematpath:fullsubpath error:null][nsfilesize]integervalue]; } } return totalbytesize; } //如果是单个文件就输出文件大小 else { return [[mgr attributesofitematpath:self error:null][nsfilesize]integervalue]; } }如果我们要去删除某个文件或者某个文件夹,我们直接用文件管理者对象的一个方法就可以了
nsstring * str1 = @"文件/文件夹路径"; [mgr removeitematpath:str1 error:null];