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];
        }
    }
原文地址:https://www.cnblogs.com/SimonGao/p/5067683.html