iPhone开发数据持久化总结之第1篇—NSUserDefaults .

本文通过一个具体的项目实例,详细介绍了如何使用NSUserDefaults来进行iOS应用中的数据持久化操作。包括了项目的搭建步骤、数据的存储与读取过程,并且解释了数据在应用程序沙盒中的存储位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,工程结构如下:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/7401/3b04aff7-2f26-32d0-adfe-6d47c996c1e1.png[/img]
[/img]


2、修改ViewController.xib,添加两个Label控件和两个TextField控件,如下:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/7403/43dcefb3-e8d9-3331-b74c-165a9cd2066c.png[/img]
[/img]


3、修改ViewController.h,如下:
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

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



连接输出口server、port,如下:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/7405/306d3060-50da-3173-9c1f-7e43bef011af.png[/img]
[/img]


4、修改ViewController.m,如下
#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中输入如下内容:
[img]
[img]http://dl.iteye.com/upload/attachment/0078/7407/2e263297-cf7d-3d9d-8330-7c8bc4d60c8a.png[/img]
[/img]


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


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

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

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

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

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

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

[img]
[img]http://dl.iteye.com/upload/attachment/0078/7409/96f423f0-7273-3e1b-ac29-79583204f803.png[/img]
[/img]


打开Applications目录,截图如下:

[img]
[img]http://dl.iteye.com/upload/attachment/0078/7411/a84ba675-b9fb-3de6-9769-7cb237909895.png[/img]
[/img]

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

[img]
[img]http://dl.iteye.com/upload/attachment/0078/7413/e5a135b7-6a7a-31a9-82d0-fe982088780e.png[/img]
[/img]

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

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


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

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

[img][/img]


[img]http://dl.iteye.com/upload/attachment/0078/7415/d10ed48f-4bfb-3462-b7b2-12ce1874cfd3.png[/img]
可以发现,使用NSUserDefaults时,数据默认保存在沙盒的Library目录下的文件:工程名称.plist中。


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


7、总结:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值