iOS中的缓存计算和清除

作者: cd5e2b81487d | 来源:发表于2016-05-20 15:10 被阅读4531次

    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框架自己实现了清理缓存操作,我们可以直接调用。

    //同样也是利用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给我们缓存的图片文件....

    相关文章

      网友评论

      • cc4514ad7716:楼主,请问一下,你那两个方法的参数path是啥?是不是自己指定删除什么文件,只要给文件名嘛?还是要给出该文件在沙盒中具体的位置?
      • Resurgent:方法错了吧 不是clean 应该是[[SDImageCache sharedImageCache] clearDisk];
      • CharlesZhang:小白学习了,大神坚持!
        cd5e2b81487d:@西米没有酥 哦,是吗..你要多带带我啊.
      • cd5e2b81487d:刚开始写,加油吧

      本文标题:iOS中的缓存计算和清除

      本文链接:https://www.haomeiwen.com/subject/dijnrttx.html