zoukankan      html  css  js  c++  java
  • iOS 之 文件缓存

      对于信息量不是太大的数据,可以使用文件缓存来处理。文件缓存可以缓存字典和数组。

    步骤一:创建路径

      路径要一级一级往下创建,基本不用考虑创建失败的情况。但是如果创建失败了要怎么做呢?按道理应该提示出来。结束往下的操作,因为没有办法继续创建下面的目录。

      创建路径要放到~Document下面,在真机上才能运行。

      创建路径只是目录,文件名称还要在读写时附加上。

    //创建文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        BOOL isDirectory;
        NSError *error = nil;
        
        //初始化存储路径
        NSString *mapPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/couponCatch"];
    
        if (![fileManager fileExistsAtPath:mapPath isDirectory:&isDirectory]) {
            [fileManager createDirectoryAtPath:mapPath withIntermediateDirectories:YES attributes:nil error:&error];
        }

      参数:withIntermediateDirectories  ,YES 如果文件夹不存在,则创建, 如果存在表示可以覆盖;  NO 如果文件夹不存在,则创建, 如果存在不可以覆盖。

      那么覆盖路径,也算是删除路径下的所有文件了。上面代码中,可以不用判断,直接创建就可以了,只是把withIntermediateDirectories设置成NO,就可以了。设置成YES的时候,表示要删除其下的文件夹和文件,慎用。

    步骤二:写文件

      写文件是用NSArchive来归档,该类可以归档任何类型。

      归档文件有两种接口:

    NSData * data = [NSKeyedArchiver archivedDataWithRootObject:self];
    
    BOOL didWriteSuccessfull = [data writeToFile:path atomically:YES];
    
    [NSKeyedArchiver archiveRootObject:<#(nonnull id)#> toFile:<#(nonnull NSString *)#>]

      看上去,这两种接口差别不大,第二种更像是第一种的组合版本。第一种多了一个参数,atomically原子级。不知道这有什么作用

    步骤三:读文件

    NSData * data = [NSData dataWithContentsOfFile:path];
    [NSKeyedUnarchiver unarchiveObjectWithData:data];
    

    删除文件

    NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];
        NSEnumerator *eDir = [contents objectEnumerator];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSString* fileName;
        while (fileName = [eDir nextObject])
        {
            if (fileName!=nil)
            {
                [fileManager removeItemAtPath:[path stringByAppendingPathComponent:fileName] error:NULL];
            }
        }
    
  • 相关阅读:
    SAP系统邮件功能配置
    SAP SQL 表inner join 不同长度字段连接
    Read_text 获取传入参数
    imageio.write 惹的祸,占用cpu过高,堆溢出问题
    消息队列报 堆溢出解决方案
    技术文档java
    maven:项目中一些依赖不能更新可使用如下命令进行更新 maven库
    volatile 验证 java
    用Lock 和Newcondition实现同步容器 java
    计算数组中有几对相反数
  • 原文地址:https://www.cnblogs.com/SimonGao/p/5067683.html
Copyright © 2011-2022 走看看