前言
iOS本地缓存数据方式有五种:
1.直接写文件方式:可以存储的对象有NSString、NSArray、NSDictionary、NSData、NSNumber,数据全部存放在一个属性列表文件(*.plist文件)中。
2.NSUserDefaults(偏好设置),用来存储应用设置信息,文件放在perference目录下。
3.归档操作(NSkeyedArchiver),不同于前面两种,它可以把自定义对象存放在文件中。
4.coreData:coreData是苹果官方iOS5之后推出的综合型数据库,其使用了ORM(Object Relational Mapping)对象关系映射技术,将对象转换成数据,存储在本地数据库中。coreData为了提高效率,甚至将数据存储在不同的数据库中,且在使用的时候将本地数据放到内存中使得访问速度更快。我们可以选择coreData的数据存储方式,包括sqlite、xml等格式。但也正是coreData 是完全面向对象的,其在执行效率上比不上原生的数据库。除此之外,coreData拥有数据验证、undo等其他功能,在功能上是几种持久化方案最多的。
5.FMDB:FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加轻量级和灵活,提供了多线程安全的数据库操作方法,有效地防止数据混乱。
方式一:直接写文件
//获取沙盒中缓存文件夹路径
//方法一
//沙盒主目录
NSString *homePath = NSHomeDirectory();
//拼接路径
NSString *path = [homePath stringByAppendingPathComponent:@"Library/Caches"];
//方法二
//第一个参数目标文件夹目录(NSCachesDirectory查找缓存文件夹),第二个参数为查找目录的域(NSUserDomainMask为在用户目录下查找),第三个参数为结果中主目录是否展开,不展开则显示为~
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//虽然该方法返回的是一个数组,但是由于一个目标文件夹只有一个目录,所以数组中只有一个元素。
NSString *cachePath = [arr lastObject];
//或者
// NSString *cachePath = [arr objectAtIndex:0];
/**
//获取沙盒中Document文件夹或者tmp文件夹路径都可使用上面两种方法
//tmp文件夹路径可直接这样获取
NSString *tmpPath = NSTemporaryDirectory();
NSLog(@"%@",tmpPath);
**/
//拼接路径(目标路径),这个时候如果目录下不存在这个lotheve.plist文件,这个目录实际上是不存在的。
NSString *filePath = [cachePath stringByAppendingPathComponent:@"tese.plist"];
NSLog(@"%@",filePath);
//创建数据
NSDictionary *content = @{@"字典数据测试1":@"1",@"字典数据测试2":@"2",@"字典数据测试":@"3"};
//将数据存到目标路径的文件中(这个时候如果该路径下文件不存在将会自动创建)
//用writeToFile方法写文件会覆盖掉原来的内容
[content writeToFile:filePath atomically:YES];
//读取数据(通过字典的方式读出文件中的内容)
NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:filePath];
NSLog(@"%@",dic);
沙盒中Library/Caches目录下多了lotheve.plist文件:
文件内容:
如何获取模拟器沙盒路径:
打印日志,复制路径打开mac finder,点击左上角菜单前往,前往文件夹,把路径粘贴上去。
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSLog(@"%@",path);
方式二:NSUserDefaults(偏好设置)
每个应用都有一个NSUesrDefaults实例,通过它可以存储应用配置信息以及用户信息,比如保存用户名、密码、字体大小、是否自动登录等等。数据自动保存在沙盒的Libarary/Preferences目录下。同样,该方法只能存取NSString、NSArray、NSDictionary、NSData、NSNumber类型的数据。
属性列表是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式。在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置。plist只能用数组(NSArray)或者字典(NSDictionary)进行读取,由于属性列表本身不加密,所以安全性几乎可以说为零。因为,属性列表正常用于存储少量的并且不重要的数据。
在程序启动后,系统会自动创建一个NSUserDefaults的单例对象,我们可以获取这个单例来存储少量的数据,它会将输出存储在.plist格式的文件中。其优点是像字典一样的赋值方式方便简单,但缺点是无法存储自定义的数据。
代码示例:
//点击button保存数据
- (IBAction)saveData:(id)sender {
//获取NSUserDefaults对象
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//存数据,不需要设置路劲,NSUserDefaults将数据保存在preferences目录下
[userDefaults setObject:@"Lotheve" forKey:@"name"];
[userDefaults setObject:@"NSUserDefaults" forKey:@"demo&#