美文网首页
清除缓存

清除缓存

作者: Coder007 | 来源:发表于2017-10-17 10:54 被阅读14次

    计算缓存大小

    • 日常开发中,App中总是需要一些缓存,最简单的就是图片缓存了
    • 而且基本上所有App在设置界面中都由清空缓存的选项
    • 想要清空缓存,第一步是要计算缓存大小
    如何计算缓存大小
    • 以SDWebImage的缓存为例,SDWebImage已经提供了清除缓存的方法,这里只是做演示
    • 方法一:
    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [caches stringByAppendingPathComponent:@"default/com.hackemist.SDWebImageCache.default"];
    // 遍历器
    NSDirectoryEnumerator *fileEnumerator = [manager enumeratorAtPath:cachePath];
    NSInteger totalSize = 0;
    [[SDImageCache sharedImageCache] getSize];
    for (NSString *fileName in fileEnumerator) {
        // 拼接文件的全路径,有可能是文件,有可能是文件夹
        NSString *filePath = [cachePath stringByAppendingPathComponent:fileName];
        NSDictionary *attrs = [manager attributesOfItemAtPath:filePath error:nil];
        // 排除是文件夹,不计算文件夹的大小
        if([attrs[NSFileType] isEqualToString:NSFileTypeDirectory]) continue;
        totalSize += [attrs[NSFileSize] integerValue];
    }
    
    • 方法二:
    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [caches stringByAppendingPathComponent:@"default/com.hackemist.SDWebImageCache.default"];
    // 获取当前路径下所有子路径(包含所有文件夹和文件)
    NSArray *subpaths = [manager subpathsOfDirectoryAtPath:cachePath error:nil];
    NSInteger totalSize = 0;
    for (NSString *fileName in subpaths) {
        // 拼接文件的全路径,有可能是文件,有可能是文件夹
        NSString *filePath = [cachePath stringByAppendingPathComponent:fileName];
        NSDictionary *attrs = [manager attributesOfItemAtPath:filePath error:nil];
        if([attrs[NSFileType] isEqualToString:NSFileTypeDirectory]) continue;
        totalSize += [attrs[NSFileSize] integerValue];
    }
    
    • 这里只是举个例子,通常我们项目中不止一个文件夹需要清理,所以计算的时候都计算一遍,然后加起来

    删除缓存文件

    • 删除缓存文件其实很简单,将需要删除的最外层文件夹删除掉就行了,当然了,下次创建的时候需要做好判断
    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSString *cachePath = [caches stringByAppendingPathComponent:@"default/com.hackemist.SDWebImageCache.default"];
    [manager removeItemAtPath:cachePath error:nil];
    

    相关文章

      网友评论

          本文标题:清除缓存

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