转载请注明出处,原文网址:http://blog.csdn.net/m_changgong/article/details/8262079 作者:张燕广
IOS数据持久化方式大概有5种:
1)User Defaults 2)属性列表 3)归档 4)sqlite3数据库 5)coreData
其实1)与2)都是用.plist属性文件保存数据,只是操作方式及保存位置不同,这5种方式的使用情景及其优缺点,后面的博文会逐一进行对比分析。
下面首先演示第一种方式User Defaults。
实现的功能:1)演示NSUserDefaults持久化数据。
关键词:数据持久化 NSUserDefaults
1、新建一个Sigle View Application,命名为Persistence_NSUserDefaults,工程结构如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第1张图片](http://img.e-com-net.com/image/info5/4486ae814f47400ba43c2d30d7df2209.jpg)
2、修改ViewController.xib,添加两个Label控件和两个TextField控件,如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第2张图片](http://img.e-com-net.com/image/info5/adcced72e0964da2abc586e039b292c7.png)
3、修改ViewController.h,如下:
- <span style="font-family:Microsoft YaHei;font-size:18px;">#import <UIKit/UIKit.h>
-
- @interface ViewController : UIViewController
-
- @property(retain,nonatomic)IBOutlet UITextField *server;
- @property(retain,nonatomic)IBOutlet UITextField *port;
- @end</span>
连接输出口server、port,如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第3张图片](http://img.e-com-net.com/image/info5/848feb65749a44588aa0874fca953d48.jpg)
4、修改ViewController.m,如下:
- #import "ViewController.h"
-
- @interface ViewController ()
-
- @end
-
- @implementation ViewController
- @synthesize server;
- @synthesize port;
-
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- NSLog(@"viewDidLoad");
-
- [self initData];
-
- UIApplication *app = [UIApplication sharedApplication];
- [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:app];
- }
-
-
- -(void)initData{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- server.text = [defaults objectForKey:@"server"];
- port.text = [defaults objectForKey:@"port"];
- }
-
- -(void)applicationWillDidEnterBackground:(NSNotification *)notification{
- NSLog(@"#applicationWillEnterForeground");
- [self saveData];
- }
-
-
- -(void)saveData{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setObject:server.text forKey:@"server"];
- [defaults setObject:port.text forKey:@"port"];
- [defaults synchronize];
- }
-
- - (void)viewDidUnload
- {
- [super viewDidUnload];
-
- server = nil;
- port = nil;
- }
-
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
-
- @end
5、编译、运行,在TextField中输入如下内容:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第4张图片](http://img.e-com-net.com/image/info5/556f6ccaa2f74ed3890918a49be8f136.jpg)
退出Simulator,然后重新运行程序,上次输入的内容已显示在TextField中。
6、数据到底保存到哪儿了???
iPhone应用程序沙盒,或许你听过这个东东,没听过也没关系,下面就说说它。
1)iPhone应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒。
2) 沙盒在哪儿呢?先来看一下iPhone应用程序安装后的存放位置,我mac上的地址如下:
/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0
我的模拟器是5.0的,截图如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第5张图片](http://img.e-com-net.com/image/info5/6e9b93fc7625448b837ee6a4b573b0ae.jpg)
打开Applications目录,截图如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第6张图片](http://img.e-com-net.com/image/info5/d29fb0298da54abba17d3967405310ab.jpg)
上图中每个目录都是一个应用程序的沙盒,最上面的那个目录就是刚刚演示的工程Persistence_NSUserDefaults安装后的目录,打开该目录,截图如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第7张图片](http://img.e-com-net.com/image/info5/57eb84beebe74ce1a7c286b3ec2a090f.jpg)
也可以打开Applications下的其它目录验证一下,每个iPhone应用程序自己的沙盒下有3个目录,分别是:
1)Documents:应用程序数据保存到该目录下,但是基于NSUserDefaults的数据不会保存到该目录下(所以,刚才演示的工程Persistence_NSUserDefaults的数据没有保存到该目录下)
2)Library:基于NSUserDefaults的数据会保存到该目录,工程Persistence_NSUserDefaults的数据一定保存到该目录下啦,赶紧找一下吧,
子目录Preferences下的com.zyg.ios.Persistence-NSUserDefaults.plist文件保存了server、port数据,打开看一下,截图如下:
![iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults_第8张图片](http://img.e-com-net.com/image/info5/57eb84beebe74ce1a7c286b3ec2a090f.jpg)
可以发现,使用NSUserDefaults时,数据默认保存在沙盒的Library目录下的文件:工程名称.plist中。
3)tmp:存储临时文件。每个应用程序应该负责删除自己tmp目录下的临时数据。
7、总结:
NSUserDefaults一般用于保存首选项信息、缓存数据等少量数据。
本文工程Persistence_NSUserDefaults纯粹为了演示,实际开发中不一定这样应用。
需要源码的网友请留言哦