数据持久化总结之—NSUserDefaults

第一种方式User Defaults。

实现的功能:1)演示NSUserDefaults持久化数据。

关键词:数据持久化 NSUserDefaults

1、新建一个Sigle View Application,命名为Persistence_NSUserDefaults,工程结构如下:

数据持久化总结之—NSUserDefaults_第1张图片

2、修改ViewController.xib,添加两个Label控件和两个TextField控件,如下:

数据持久化总结之—NSUserDefaults_第2张图片

3、修改ViewController.h,如下:

[cpp]view plaincopy

#import 

@interface ViewController : UIViewController

@property(retain,nonatomic)IBOutlet UITextField *server;

@property(retain,nonatomic)IBOutlet UITextField *port;

@end

连接输出口server、port,如下:

数据持久化总结之—NSUserDefaults_第3张图片

4、修改ViewController.m,如下:

[cpp]view plaincopy

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize server;

@synthesize port;

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

NSLog(@"viewDidLoad");

//初始化数据

[self initData];

//订阅通知UIApplicationDidEnterBackgroundNotification,进行数据保存操作

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];//强制User Defaults系统进行保存

}

- (void)viewDidUnload

{

[super viewDidUnload];

// Release any retained subviews of the main view.

server = nil;

port = nil;

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return(interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

}

@end

5、编译、运行,在TextField中输入如下内容:

数据持久化总结之—NSUserDefaults_第4张图片

退出Simulator,然后重新运行程序,上次输入的内容已显示在TextField中。

6、数据到底保存到哪儿了???

iPhone应用程序沙盒,或许你听过这个东东,没听过也没关系,下面就说说它。

1)iPhone应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒。

2)  沙盒在哪儿呢?先来看一下iPhone应用程序安装后的存放位置,我mac上的地址如下:

/Users/duobianxing/Library/Application Support/iPhone Simulator/5.0

我的模拟器是5.0的,截图如下:

数据持久化总结之—NSUserDefaults_第5张图片

打开Applications目录,截图如下:

上图中每个目录都是一个应用程序的沙盒,最上面的那个目录就是刚刚演示的工程Persistence_NSUserDefaults安装后的目录,打开该目录,截图如下:

数据持久化总结之—NSUserDefaults_第6张图片

也可以打开Applications下的其它目录验证一下,每个iPhone应用程序自己的沙盒下有3个目录,分别是:

1)Documents:应用程序数据保存到该目录下,但是基于NSUserDefaults的数据不会保存到该目录下(所以,刚才演示的工程Persistence_NSUserDefaults的数据没有保存到该目录下)

2)Library:基于NSUserDefaults的数据会保存到该目录,工程Persistence_NSUserDefaults的数据一定保存到该目录下啦,赶紧找一下吧,

子目录Preferences下的com.zyg.ios.Persistence-NSUserDefaults.plist文件保存了server、port数据,打开看一下,截图如下:

数据持久化总结之—NSUserDefaults_第7张图片

可以发现,使用NSUserDefaults时,数据默认保存在沙盒的Library目录下的文件:工程名称.plist中。

3)tmp:存储临时文件。每个应用程序应该负责删除自己tmp目录下的临时数据。

7、总结:

NSUserDefaults一般用于保存首选项信息、缓存数据等少量数据。

本文工程Persistence_NSUserDefaults纯粹为了演示,实际开发中不一定这样应用。

你可能感兴趣的:(数据持久化总结之—NSUserDefaults)