十、iOS缓存及文件处理

本文深入探讨了iOS平台上的缓存管理和文件处理技术,包括如何有效地存储和检索数据,优化本地存储策略,以及理解iOS的沙盒机制对文件操作的影响。通过实例,解析了NSCache、SQLite、Core Data等在iOS缓存和文件操作中的应用,帮助开发者提升应用性能。
摘要由CSDN通过智能技术生成
// 递归计算某路径下所有文件大小,单位B,除以1024单位为KB,除以1024*1024单位为M
- (void)getCacheSizeWithFilePath:(NSString *)path totalSize:(long long *)totalSize {
    
    // 备注:[SDImageCache sharedImageCache].getSize没有计入
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL isDir = NO;
    BOOL isExist = [fm fileExistsAtPath:path isDirectory:&isDir];
    if (isExist) {
        if (isDir) {
            NSArray *subPaths = [fm subpathsAtPath:path];
            for (NSString *sub in subPaths) {
                NSString *absolutePath = [path stringByAppendingPathComponent:sub];
                [self getCacheSizeWithFilePath:absolutePath totalSize:&*totalSize];
            }
        } else {
            *totalSize += [fm attributesOfItemAtPath:path error:nil].fileSize;
        }
    }
}
// 递归清理某路径下所有文件
- (void)clearCacheWithFilePath:(NSString *)path {
    
    // 备注:[[SDImageCache sharedImageCache] clearDisk]没有清理
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL isDir = NO;
    BOOL isExist = [fm fileExistsAtPath:path isDirectory:&isDir];
    if (isExist) {
        if (isDir) {
            NSArray *subPaths = [fm subpathsAtPath:path];
            for (NSString *sub in subPaths) {
                NSString *absolutePath = [path stringByAppendingPathComponent:sub];
                [fm removeItemAtPath:absolutePath error:nil];
            }
        } else {
            [fm removeItemAtPath:path error:nil];
        }
    }
}
// 将 mainBundle 保存文件到 NSDocumentDirectory
- (void)saveToDocument:(NSString *)fileName {
    
    NSString *filePath = [[NSBundle mainBundle] pathForAuxiliaryExecutable:fileName];
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    NSString *dstPath = [path stringByAppendingPathComponent:fileName];
    if ([[NSFileManager defaultManager] fileExistsAtPath:dstPath]) {
        [[NSFileManager defaultManager] removeItemAtPath:dstPath error:nil];
    }
    [[NSFileManager defaultManager] copyItemAtPath:filePath toPath:dstPath error:nil];
}
// 递归读取某路径下的所有规定后缀的文件
- (void)getAllFileWithPath:(NSString *)path
                    suffix:(NSString *)suffix
                   allFile:(NSMutableArray **)allFile {
    
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL isDir = NO;
    BOOL isExist = [fm fileExistsAtPath:path isDirectory:&isDir];
    if (isExist) {
        if (isDir) {
            NSArray *dirArray = [fm contentsOfDirectoryAtPath:path error:nil];
            for (NSString *str in dirArray) {
                NSString *subPath = [path stringByAppendingPathComponent:str];
                [self getAllFileWithPath:subPath suffix:suffix allFile:&*allFile];
            }
        } else {
            if ([path hasSuffix:suffix]) {
                [*allFile addObject:path];
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值