iPhone开发【二十】数据持久化总结之第1篇—NSUserDefaults
发布日期:2021-09-28 18:46:34 浏览次数:8 分类:技术文章

本文共 3107 字,大约阅读时间需要 10 分钟。

转载请注明出处,原文网址: 作者:张燕广

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,工程结构如下:

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

3、修改ViewController.h,如下:

[cpp] 
  1. <span style="font-family:Microsoft YaHei;font-size:18px;">#import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4.   
  5. @property(retain,nonatomic)IBOutlet UITextField *server;  
  6. @property(retain,nonatomic)IBOutlet UITextField *port;  
  7. @end</span>  
连接输出口server、port,如下:

4、修改ViewController.m,如下:

[cpp] 
  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8. @synthesize server;  
  9. @synthesize port;  
  10.   
  11. - (void)viewDidLoad  
  12. {  
  13.     [super viewDidLoad];  
  14.     // Do any additional setup after loading the view, typically from a nib.  
  15.     NSLog(@"viewDidLoad");  
  16.     //初始化数据  
  17.     [self initData];  
  18.     //订阅通知UIApplicationDidEnterBackgroundNotification,进行数据保存操作  
  19.     UIApplication *app = [UIApplication sharedApplication];  
  20.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:app];  
  21. }  
  22.   
  23. //初始化数据  
  24. -(void)initData{  
  25.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  26.     server.text =  [defaults objectForKey:@"server"];  
  27.     port.text = [defaults objectForKey:@"port"];  
  28. }  
  29.   
  30. -(void)applicationWillDidEnterBackground:(NSNotification *)notification{  
  31.     NSLog(@"#applicationWillEnterForeground");  
  32.     [self saveData];  
  33. }  
  34.   
  35. //保存数据  
  36. -(void)saveData{  
  37.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  38.     [defaults setObject:server.text forKey:@"server"];  
  39.     [defaults setObject:port.text forKey:@"port"];  
  40.     [defaults synchronize];//强制User Defaults系统进行保存  
  41. }  
  42.   
  43. - (void)viewDidUnload  
  44. {  
  45.     [super viewDidUnload];  
  46.     // Release any retained subviews of the main view.  
  47.     server = nil;  
  48.     port = nil;  
  49. }  
  50.   
  51. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  52. {  
  53.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  54. }  
  55.   
  56. @end  
5、编译、运行,在TextField中输入如下内容:

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

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

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

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

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

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

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

打开Applications目录,截图如下:

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

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

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

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

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

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

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

7、总结:

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

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

需要源码的网友请留言哦

转载地址:https://blog.csdn.net/h3c4lenovo/article/details/8568215 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:iPhone开发【二十一】数据持久化总结之第2篇—属性文件(.plist)
下一篇:iPhone开发【十九】XML解析之NSXMLParser(使用Web Services查询火车信息)

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月14日 17时06分42秒