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

步骤一:创建路径

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

  创建路径要放到~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];
}
}

iOS 之 文件缓存的更多相关文章

  1. iOS 清理文件缓存

    本文摘自:<msp的昌伟哥哥-iOS开发-清理缓存功能的实现>摘下来的目的就是为了能够学习.还望看到文章的同学,前往原创的博客园.感谢msp的昌伟哥哥的分享精神. 移动应用在处理网络资源时 ...

  2. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码

    iOS精选源码 一款优秀的 聆听夜空FM 源码 zhPopupController 简单快捷弹出自定义视图 WHStoryMaker搭建美图(贴纸,涂鸦,文字,滤镜) iOS cell高度自适应 有加 ...

  3. iOS之 清理缓存

    作为一个开发者,对于缓存的清理也是理所应当的需要的.这次就简单的谈一下iOS中对于缓存的清理方法. 我们清理缓存通常是在这三种方式下进行的: (1)项目中的清理缓存按钮 (2)点击退出app按钮时清理 ...

  4. iOS应用文件夹

    IOS5多了一个比较重要的功能iCloud,但是同时也出现一个问题,很多的APP都把很大量的数据存在APP底下的Documents(/Documents )文件夹里面,这样苹果会reject掉你的AP ...

  5. iOS中dyld缓存的实现原理是怎样的?

    在iOS开发中,为了提升系统的安全性,很多系统库文件都被打包到一个缓存的文件当中即dyld缓存,那大家对dyld缓存了解多少呢?今天小编将和大家分享的就是一位iOS大神对dyld缓存的使用分析,一起来 ...

  6. iOS - ImageCache 网络图片缓存

    1.ImageCache 使用内存缓存方式: 使用沙盒缓存方式: 使用网络图片第三方库方式: SDWebImage: iOS 中著名的网络图片处理框架 包含的功能:图片下载.图片缓存.下载进度监听.g ...

  7. 玩转iOS开发 - 数据缓存

    Why Cache 有时候.对同一个URL请求多次,返回的数据可能都是一样的,比方server上的某张图片.不管下载多少次,返回的数据都是一样的. 上面的情况会造成下面问题 (1)用户流量的浪费 (2 ...

  8. iOS html5使用缓存并及时更新方案总结

    最近一段时间研究了一下H5在iOS移动端表现时使用缓存并可及时更新方案,总结如下: 一.使用Webview自带缓存机制 当我们使用webview加载html资源时的,本质上就是一个向服务器索取资源的h ...

  9. iOS:文件操作相关(18-03-23更)

    0.iOS文件系统 1.工程内文件 2.文件夹管理 3.文件操作 4.NSCache 附录: 1.沙盒文件夹.文件大小 2.清除沙盒 Library / Cache 下所有数据 3.测试plist 0 ...

随机推荐

  1. Linux查看文件最后几行的命令,日志的福音啊

    tail -n 20 filename说明:显示filename最后20行

  2. usb调试

    修改文件:/home/mxy/code/v1/kernel-3.10/drivers/power/mediatek/battery_common.c //bool AutoDebug=true;//x ...

  3. stock 当天盘势

    看盘 (一)怎样看大盘当天的指数收阴.收阳 投资者每天都看大盘,但多数人看不准大盘.大盘到底当天是收阴,还是收阳?我通过很长时间的记录.验证,发现大盘在正常时间内,收阴.收阳是有规律的.我判断的准确率 ...

  4. 5V与3.3V器件电平转换

    源:5V与3.3V器件电平转换 当你使用3.3V的单片机的时候,电平转换就在所难免了,经常会遇到3.3转5V或者5V转3.3V的情况,这里介绍一个简单的电路,他可以实现两个电平的相互转换(注意是相互哦 ...

  5. 利用hibernate实现oracle(每张表的ID)自动增长

    设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence 例如创建一个序列:CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVA ...

  6. 未出现的子串(unapeared)

    未出现的子串(unapeared) 题目描述 有一个长度为n的数字串,其中会出现数字1,2,3,…,q(5≤q≤9).现在的问题是,需要求出一个长度最小的串(出现的数字也是1-q),使得该串不是这个数 ...

  7. 小红的难题<递推>

    题意:五个数:N,x,y,A,B;N是台阶总数,x,y是每步可以走x或者y步,但是一定要走到A,B台阶上. 思路:学长给的题解,递推,稍微优化一点. >重点在递推 #include<cst ...

  8. 我有一壶酒 Android学习之Service(1)--->BinderService方式

    本文只讨论扩展Binder类 创建一个Binder.xml <?xml version="1.0" encoding="utf-8"?> <L ...

  9. Codeforces Round #364 (Div. 2) E. Connecting Universities (DFS)

    E. Connecting Universities time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  10. python数组查找算法---bisect二分查找插入

    1 实例 这个模块只有几个函数, 一旦决定使用二分搜索时,立马要想到使用这个模块 [python] view plaincopyprint? import bisect L = [1,3,3,6,8, ...