欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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];
ios开发中如何有效的清除文件缓存?
我们可以给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];