`

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

    博客分类:
  • ios
ios 
阅读更多
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]




2、修改ViewController.xib,添加两个Label控件和两个TextField控件,如下:
[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]






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]



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


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

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

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

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

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

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

[img]

[/img]


打开Applications目录,截图如下:

[img]

[/img]

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

[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]



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


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


7、总结:

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

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


  • 大小: 35 KB
  • 大小: 10.9 KB
  • 大小: 30 KB
  • 大小: 81.8 KB
  • 大小: 42.8 KB
  • 大小: 122.8 KB
  • 大小: 68.2 KB
  • 大小: 68.2 KB
分享到:
评论

相关推荐

    iPhone开发书籍大全].Beginning.iPhone.SDK.Programming.with.Objective-C

    ##### 第三部分:数据展示与持久化 - **第10章**:使用TableView - TableView的基本概念与实现方式 - 动态加载数据到TableView - TableView的分组与排序功能 - **第11章**:应用偏好设置 - 存储和读取用户偏好...

    iphone开发秘籍第2版-2~12章源码

    《iPhone开发秘籍第二版》是一本针对iOS应用开发者的权威指南,涵盖了从基础到进阶的诸多关键知识点。此资源包含2至12章的源代码,为开发者提供了实战练习和深入理解iOS编程的宝贵材料。以下是这些章节中涉及的主要...

    iphone view之间传送数据

    这里我们将深入探讨如何在iPhone的两个视图之间,从view2(第二个视图)传递数据到view1(第一个视图)。 首先,我们来看一下几种常用的数据传递方法: 1. **属性赋值**:如果view1和view2之间存在明确的父子关系...

    Apress.iPhone.and.iPad.Apps.for.Absolute.Beginners.iOS.5th.Edition

    7. **数据持久化**:包括如何使用SQLite数据库、Core Data框架存储和检索应用数据,以及使用NSUserDefaults进行轻量级数据存储。 8. **网络编程**:iOS应用往往需要与服务器进行交互,如加载网页、发送和接收数据等...

    iphone开发实战 书本源码

    在本资源中,“iPhone开发实战 书本源码”提供了从第1章到第20章的完整学习路径,旨在帮助开发者深入理解iOS应用开发。这个压缩包包含了一系列与iOS开发相关的Objective-C代码,适用于那些想要提升iOS编程技能或者...

    Objective.C.For.iPhone.Developers.A.Beginners.Guide.pdf

    - **Core Data**: 用于管理和持久化复杂的数据模型。支持对象关系映射 (ORM) 和版本控制。 - **NSUserDefaults**: 用于存储简单的键值对数据,适用于配置设置等。 - **文件系统操作**: 可以通过 `NSFileManager` 来...

    深入浅出iphone编程 (headfirst iphone development)11 chapter

    4. **数据持久化**:应用中的数据需要在用户关闭应用后仍然保存。本章可能会介绍如何使用SQLite数据库存储数据,或者使用NSUserDefaults进行轻量级的数据保存。 5. **网络通信**:许多应用程序需要访问互联网获取或...

    cocos2d-iphone之魔塔20层第九部分

    《cocos2d-iphone之魔塔20层第九部分》是针对iOS平台的游戏开发教程,专注于使用cocos2d-iPhone框架制作的一款经典游戏——魔塔的开发过程。cocos2d-iPhone是一个强大的2D游戏开发框架,它基于C++和Objective-C,为...

    斯坦福大学iPhone教程1-9

    4. **Lecture 4 Slides (April 13, 2009)**: 讲座四可能会涵盖数据持久化,比如使用NSUserDefaults存储轻量级数据,SQLite数据库进行结构化数据存储,或者使用Core Data框架进行复杂的数据管理。 5. **Lecture 5 ...

    Begin_iPhone4 书籍 源码

    7. **数据持久化**:源码可能包含SQLite数据库、Core Data或 NSUserDefaults 的使用,这些都是在iOS中保存数据的常见方式。 8. **网络编程**:可能包含网络请求(如HTTP/HTTPS)的实现,可以使用NSURLConnection、...

    cocos2d-iphone之魔塔20层第四部分

    《cocos2d-iphone之魔塔20层第四部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架。cocos2d-iphone是一款开源的游戏开发框架,它允许开发者使用Objective-C语言来创建2D游戏、演示和其他图形/...

    iphone基础编程讲义5

    讲义中可能会涉及数据持久化,这包括使用Core Data框架存储结构化数据,或者使用NSUserDefaults保存轻量级的设置和偏好。Core Data提供了模型、视图和控制器的数据管理机制,让开发者可以专注于业务逻辑,而不是底层...

    iphone Cocos2D游戏开发实战(下)源码

    9. **游戏保存与加载**:游戏数据的保存和加载是游戏持久化的重要环节。开发者需要了解如何使用NSKeyedArchiver和NSUserDefaults等iOS内置技术来保存游戏进度和用户数据。 10. **性能优化**:在移动设备上,性能...

    iphone笔试题和面试题

    5. **数据持久化**:包括NSUserDefaults、SQLite数据库、CoreData的使用,以及文件系统操作。 6. **网络编程**:熟悉HTTP/HTTPS请求,使用URLSession或第三方库如Alamofire进行网络请求,理解异步编程和JSON解析。 ...

    【Dealing with Data, User Defaults, SQLite, Web Services】[PDF] [iPhone/iPad/iOS]

    归档是另一种数据持久化策略,主要用于对象的序列化和反序列化。当需要将自定义对象保存到文件系统或通过网络传输时,归档是一种有效的方式。Objective-C和Swift均支持归档机制,可以通过`NSKeyedArchiver`和`...

    [iOS5开发基础教程].(Beginning.iOS.5.Development.Exploring.the.iOS.SDK.E文文字版

    - **数据持久化**(Chapter 13):讲解如何使用Core Data等技术来保存和加载应用程序的数据。 - **用户默认设置**(Chapter 12):介绍如何使用NSUserDefaults来存储用户偏好设置。 - **iPad应用特别考虑**(Chapter...

    iphone4和ipad学习基础教程

    你将了解Core Data框架,用于持久化应用程序的数据,以及SQLite数据库的使用。同时,你还会接触到NSUserDefaults,这是一个轻量级的选项,用于存储用户偏好设置或小型数据。 最后,性能优化和测试是确保应用程序...

    ios-高仿美团框架.zip

    - Realm:另一种流行的持久化解决方案,比CoreData更轻量级,操作更加灵活,性能优秀。 - NSUserDefaults:简单的轻量级数据存储,常用于存储用户配置信息。 4. 缓存策略(Cache Strategy): - NSURLSession:...

    Professional iPhone and iPad Application Development

    - 使用Core Data框架进行对象关系映射(ORM)和数据持久化。 - SQLite数据库在iOS中的应用及其优势。 - 键值存储(Key-Value Store)的使用场景和实现方式。 - 云存储解决方案的集成,如iCloud和其他云服务。 #####...

Global site tag (gtag.js) - Google Analytics