本地数据持久化方法

http://www.jianshu.com/p/86ea6da905cf

http://www.cocoachina.com/industry/20130328/5908.html

1. 属性列表(plist)NSUserDefaults

属性列表是一种明文的轻量级存储方式,其存储格式有多种,最常规格式为XML格式。在我们创建一个新的项目的时候,Xcode会自动生成一个info.plist文件用来存储项目的部分系统设置。plist只能用数组(NSArray)或者字典(NSDictionary)进行读取,由于属性列表本身不加密,所以安全性几乎可以说为零。因为,属性列表正常用于存储少量的并且不重要的数据。

在程序启动后,系统会自动创建一个NSUserDefaults的单例对象,我们可以获取这个单例来存储少量的数据,它会将输出存储在.plist格式的文件中。其优点是像字典一样的赋值方式方便简单,但缺点是无法存储自定义的数据。

2. 数据归档(NSKeyedValueArchiver)

与属性列表相反,同样作为轻量级存储的持久化方案,数据归档是进行加密处理的,数据在经过归档处理会转换成二进制数据,所以安全性要远远高于属性列表。另外使用归档方式,我们可以将复杂的对象写入文件中,并且不管添加多少对象,将对象写入磁盘的方式都是一样的。

要使用对象归档,对象必须实现NSCoding协议。大部分Objective-C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议。要实现NSCoding协议,要实现两个方法:encodeWithCoder和initWithCoder。

使用NSKeyedArchiver对自定义的数据进行序列化,并且保存在沙盒目录下。使用这种归档的前提是让存储的数据模型遵守NSCoding协议并且实现其两个协议方法。(当然,如果为了更加安全的存储,也可以遵守NSSecureCoding协议,这是iOS6之后新增的特性)

3. 数据库(sqlite)

sqlite是一个轻量级、跨平台的小型数据库,其拥有可移植性高、有着和MySql几乎相同的数据库语句以及无需服务器即可使用的优点:

一、可以存储大量的数据,存储和检索的速度非常快;

二、能对数据进行大量的聚合,这样比起使用对象来进行这些操作要快。

当然,它也具有明显的缺点:

一、它没有提供数据库的创建方式;

二、它基于C语言框架设计,没有面向对象的API,所以使用起来比较麻烦;

三、复杂的数据模型的数据建表相对而言比较麻烦。

当然,我们也可以使用基于sqlite封装的开源数据库FMDB来减少使用sqlite的工作量。

SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。

4. coreData

Core Data本质上是使用SQLite保存数据,但是它不需要编写任何SQL语句。

要使用Core Data,需要在Xcode中的数据模型编辑器中设计好各个实体以及定义好他们的属性和关系。之后,通过操作这些对象,结合Core Data完成数据的持久化。

coreData是苹果官方iOS5之后推出的综合型数据库,其使用了ORM(Object Relational Mapping)对象关系映射技术,将对象转换成数据,存储在本地数据库中。coreData为了提高效率,甚至将数据存储在不同的数据库中,且在使用的时候将本地数据放到内存中使得访问速度更快。我们可以选择coreData的数据存储方式,包括sqlite、xml等格式。但也正是coreData 是完全面向对象的,其在执行效率上比不上原生的数据库。除此之外,coreData拥有数据验证、undo等其他功能,在功能上是四种持久化方案最多的。

时间: 2024-10-13 16:43:43

本地数据持久化方法的相关文章

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比

iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比 iphoneiPhoneIPhoneIPHONEIphone数据持久化 对比总结 本篇对IOS中常用的5种数据持久化方法进行简单对比总结 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇—NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存 配置信息,首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中第2种:属性

本篇对IOS中常用的5种数据持久化方法进行简单对比总结

 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇-NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中 第2种:属性列表(iPhone开发[二十一]数据持久化总结之第2篇-属性文件(.plist)) 1)易用性较强 2)数据存储在.plist文件中 3)一般用于存储少量数据,也不适合操作处理大量数据 4)缺点:无法将自定义对象序

Snail—OC学习之本地数据持久化(plist)

plist文件的格式 plist是一种数据持久化的文件 1.最外层通常为数组或者字典 2.plist里面的数据 只局限于数组.字典.逻辑值(BOOL).NSNumber.NSData.NSDate.字符串等数据类型 3.无法存储自定义类型的对象 plist作用 1.不适用它作为缓存 无法存储自定义类型的对象 2.通常存储长时间不容易发生变化的数据.国家.省市区.汽车品牌.项目的info.plist工程的设置信息 3.占用内存小 #import <Foundation/Foundation.h>

ios 保存本地数据的方法

1. NSString *path = [[NSBundle mainBundle] pathForResource:@"文件名" ofType:@"plist"]; // 文件数据类型是array NSArray *array=[NSArray arrayWithContentsOfFile:path]; //文件数据类型是*dictionary NSDictionary *dictionary = [NSDictionary dictionaryWithCont

Snail—OC学习之本地数据持久化(归档)

#import <Foundation/Foundation.h> #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSString * filePath = @"/Users/student/Desktop/snail/array.data"; //对官方类创建的对象进行存储 NSArray * array = @[@"one"

android--设置界面以及数据持久化

一.基础知识 我们在使用Android手机时,可能会经常用到其中的设置界面,如下所示: 图1 Android系统中的设置界面 而且对于我们自己开发的一个完整的程序来说,我们也会需要给用户提供一个设置界面使用户可以对程序的一些参数进行设置.因此,我们就来学习下如何实现符合我们需要的一个设置界面,及其背后的数据持久化功能. 二.实例开发 2.1 SharedPreferences 在具体介绍Android的设置界面的实现之前,我们先来介绍一下预备知识,就是Android数据持久化方法中最简单的一种,

UI_19 数据持久化(本地存储)

一.数据持久化概述 数据持久化就是数据的永久存储.其本质是将数据保存为文件,存到程序的沙盒中. 1.数据持久化的方式 1.1 writeToFile:简单对象写入文件 1.2 NSUserDefaults:应用程序偏好设置1.3 Sqlite:轻量级关系型数据库,不能直接存储对象(NSData除外),需要用到一些SQL语句,先将复杂对象归档(对象->NSData) 1.4 CoreData:对象型数据库,实质是将数据库的内部存储细节封装 1.5 Plist文件 2.应用程序沙盒 每一应用程序都有

IOS开发中数据持久化的几种方法--NSUserDefaults

IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefault是最简单直接的一个办法: 1)保存数据: 1 // 实例化一个NSUserDefaults单例对象 2 NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 3 // 把一个数组array保存在key为allContact的键值