iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
来源:互联网 发布:使用迅雷网络异常 编辑:程序博客网 时间:2024/06/05 02:10
iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
iOS数据持久化存储(1)
iOS 数据持久化存储方式有很多,博主今天只跟大家分享以下四种方法:
Plist文件、归档、NSUserDefaults 和NSFileManager
一、Plist文件
在做 iOS 开发时,经常用到plist文件, 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此通常被称为 plist文件。文件是 json 或 xml格式的。
Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息。
Plist文件可以存放的数据类型:NSString、NSArray、NSDictionary、NSData、NSNumber等。
在开发过程中,有时候需要把程序的一些配置保存下来,或者游戏数据等等。 这时候需要写入 Plist数据。写入的plist 文件会生成在对应程序的沙盒目录里。
二、归档
归档也叫序列化,是将文件存在硬盘,解档是从硬盘还原。归档和解档的操作正好相反的,但是要注意的是:他们属性的key一定要保持一致。
第1种、使用属性列表进行归档
如果对象是NSString,NSDictionary,NSArray,NSData或者NSNumber,可以使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文
sample:
第2种、NSKeyedArchiver--对象归档,数据会加密
1)、对于NSArray或者NSDictionary sample code:
结果:
success
2013-12-28 22:14:25.353 ArchiverDemo1[1206:303] (
abc,
123,
"23.4"
)
2)、如果是其他类型的对象存储到文件,可以利用NSKeyedArchiver类创建带键的档案来完成
对属性编码,归档的时候会调用
- (void)encodeWithCoder:(NSCoder *)aCoder
//对属性解码,解归档调用
- (id)initWithCoder:(NSCoder *)aDecoder
第3种:NSUserDefaults
sample code:
三、NSUserDefaults
上面也提到了NSUserDefaults,这里需要补充的是,使用NSUserDefaults存数的数据最终保存在了什么地方。
iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。
Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。
tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。
而使用NSUserDefaults存数的数据最终保存在 Library --> Preferences --> xxx.plist.
四、NSFileManager
NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
每个程序都会有它自己的沙盒,通过它你可以阅读/编写文件。写入沙盒的文件在程序的进程中将会保持稳定,即便实在程序更新的情况下。
如下所示,你可以在沙盒中定位文件目录:
//对于错误信息
NSError *error;
// 创建文件管理器
NSFileManager *fileMgr = [NSFileManagerdefaultManager];
//指向文件目录
NSString *documentsDirectory= [NSHomeDirectory()
stringByAppendingPathComponent:@"Documents"];
//创建一个目录
[[NSFileManager defaultManager] createDirectoryAtPath: [NSString stringWithFormat:@"%@/myFolder", NSHomeDirectory()] attributes:nil];
创建一个文件
现在我们已经有了文件目录,我们就能使用这个路径在沙盒中创建一个新文件并编写一段代码:
// File we want to create in the documents directory我们想要创建的文件将会出现在文件目录中
// Result is: /Documents/file1.txt结果为:/Documents/file1.txt
NSString *filePath= [documentsDirectory
stringByAppendingPathComponent:@"file1.txt"];
//需要写入的字符串
NSString *str= @"iPhoneDeveloper Tips\nhttp://iPhoneDevelopTips,com";
//写入文件
[str writeToFile:filePath atomically:YES
encoding:NSUTF8StringEncoding error:&error];
//显示文件目录的内容
NSLog(@"Documentsdirectory: %@",
[fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
我们为想要创建的文件构建一条路径(file1.txt),初始化一个字符串来写入文件,并列出目录。最后一行显示了在我们创建文件之后出现在文件目录下的一个目录列表:
对一个文件重命名
想要重命名一个文件,我们需要把文件移到一个新的路径下。下面的代码创建了我们所期望的目标文件的路径,然后请求移动文件以及在移动之后显示文件目录。
//通过移动该文件对文件重命名
NSString *filePath2= [documentsDirectory
stringByAppendingPathComponent:@"file2.txt"];
//判断是否移动
if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)
NSLog(@"Unable to move file: %@", [error localizedDescription]);
//显示文件目录的内容
NSLog(@"Documentsdirectory: %@",
[fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
在移动了文件之后,输出结果应该如下图所示:
删除一个文件
为了使这个技巧完整,让我们再一起看下如何删除一个文件:
//在filePath2中判断是否删除这个文件
if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)
NSLog(@"Unable to delete file: %@", [error localizedDescription]);
//显示文件目录的内容
NSLog(@"Documentsdirectory: %@",
[fileMgr contentsOfDirectoryAtPath:documentsDirectoryerror:&error]);
一旦文件被删除了,正如你所预料的那样,文件目录就会被自动清空。
- iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
- iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
- iOS数据存储持久化(plist,偏好设置,归档)
- iOS数据持久化 归档 plist文件
- iOS开发-数据持久化 :沙盒,归档反归档,NSFileManager文件管理器(单例)
- NSUserDefaults 归档,数据持久化
- 沙盒机制与NSFileManager与数据持久化--归档和读写和NSUserDefaults
- iOS NSUserDefaults数据持久化存储
- IOS 数据持久化(一)—— plist 存储
- 数据持久化-属性列表、归档、NSUserDefaults
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- iOS 数据持久化之使用NSUserDefaults存储数据
- 数据本地化存储之NSUserdefaults,plist文件,归档解档,数据库sqlite(FMDB)
- iOS 数据持久化(三)NSUserDefaults
- 【iOS开发-存储】数据持久化之plist存储
- iOS 使用plist和归档存储数据
- 【Java小项目】一个Socket连续传输多个文件
- NOIP2015总结
- 再谈给onScroll减压
- SSO单点登录和单点退出(跨顶级域名)
- The Best Way to Save/Import Toad Settings
- iOS数据持久化存储 (1)-- Plist 、归档、NSUserDefaults、NSFileManager
- 小白入门,不二之选:ZLG Linux公开课——嵌入式Linux开发教程
- css样式中关于li的横向排列
- 实现滑动的七种方法
- 链表操作(1)
- css3照片墙
- Linux c 源码(getvalbypos根据位置和特定的字符解析所需的信息)
- JAVA 使用properties配置文件
- springmvc通过@ResponseBody 自动解析为json对象支持中文