iOS中的缓存计算和清除完整实例代码
程序员文章站
2024-02-08 12:31:16
1.首先,一般我们项目中的缓存一般分为2大块,一个是自己缓存的一些数据;还有一个就是我们使用的sdwebimage这个第三方库给我们自动缓存的图片文件缓存了
<1&...
1.首先,一般我们项目中的缓存一般分为2大块,一个是自己缓存的一些数据;还有一个就是我们使用的sdwebimage这个第三方库给我们自动缓存的图片文件缓存了
<1>怎么计算缓存大小(主要是利用系统提供的nsfilemanager类来实现)
$1.单个文件大小的计算
-(long long)filesizeatpath:(nsstring *)path{ nsfilemanager *filemanager=[nsfilemanager defaultmanager]; if([filemanager fileexistsatpath:path]){ long long size=[filemanager attributesofitematpath:path error:nil].filesize; return size; } return 0; }
$2.文件夹大小的计算(要利用上面的$1提供的方法)
-(float)foldersizeatpath:(nsstring *)path{ nsfilemanager *filemanager=[nsfilemanager defaultmanager]; nsstring *cachepath=[nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes) firstobject]; cachepath=[cachepath stringbyappendingpathcomponent:path]; long long foldersize=0; if ([filemanager fileexistsatpath:cachepath]) { nsarray *childerfiles=[filemanager subpathsatpath:cachepath]; for (nsstring *filename in childerfiles) { nsstring *fileabsolutepath=[cachepath stringbyappendingpathcomponent:filename]; long long size=[self filesizeatpath:fileabsolutepath]; foldersize += size; nslog(@"fileabsolutepath=%@",fileabsolutepath); } //sdwebimage框架自身计算缓存的实现 foldersize+=[[sdimagecache sharedimagecache] getsize]; return foldersize/1024.0/1024.0; } return 0; }
其中foldersize+=[[sdimagecache sharedimagecache] getsize];这行代码是sdwebimage给我们提供的计算本地缓存图片大小的方法....(当然了,这个方法的底层实现依然是用的nsfilemanager做的)
上面2个方法结合起来使用,就可以计算我们总共产生多少缓存啦....
2.计算好了缓存,那么怎么清除呢??
//同样也是利用nsfilemanager api进行文件操作,sdwebimage框架自己实现了清理缓存操作,我们可以直接调用。 -(void)clearcache:(nsstring *)path{ nsstring *cachepath=[nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes) firstobject]; cachepath=[cachepath stringbyappendingpathcomponent:path]; nsfilemanager *filemanager=[nsfilemanager defaultmanager]; if ([filemanager fileexistsatpath:cachepath]) { nsarray *childerfiles=[filemanager subpathsatpath:cachepath]; for (nsstring *filename in childerfiles) { //如有需要,加入条件,过滤掉不想删除的文件 nsstring *fileabsolutepath=[cachepath stringbyappendingpathcomponent:filename]; nslog(@"fileabsolutepath=%@",fileabsolutepath); [filemanager removeitematpath:fileabsolutepath error:nil]; } } [[sdimagecache sharedimagecache] cleandisk]; }
上面再清楚换存的时候也清除了2块地方,一个是我们自己缓存的文件夹;还有就是sdwebimage给我们缓存的图片文件....
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。