OC数据持久化

来源:互联网 发布:阿里云logo矢量图 编辑:程序博客网 时间:2024/06/06 01:31

OC中有哪些数据存储方式,各有什么区别?

四种存储方式:

 1.NSUserDefaults,用于存储配置信息

2.SQLite,用于存储查询需求较多的数据

3.CoreData,用于规划应用中的对象

4.使用基本对象类型定制的个性化缓存方案.

NSUserDefaults:对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,可以按照自己的需求创建新的配置项。

SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。开发者可以以关系型数据库的方式组织数据,使用SQL DML来管理数据。一般来说应用中的格式化的文本类数据可以存放在数据库,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。

CoreData是一个管理方案,它的持久化可以通过SQLiteXML或二进制文件储存。它可以把整个应用中的对象建模并进行自动化的管理。从归档文件还原模型时CoreData并不是一次性把整个模型中的所有数据都载入内存,而是根据运行时状,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。无论从设计原理还是使用方法上看,CoreData都比较复杂。因此,如果仅仅是考虑缓存数据这个需求,CoreData绝对不是一个优选方案。CoreData的使用场景在于:整个应用使用CoreData规划,把应用内的数据通过CoreData建模,完全基于CoreData架构应用。使用基本对象类型定制的个性化缓存方案:从需求出发分析缓存数据有哪些要求:Key查找,快速读取,写入不影响正常操作,不浪费内存,支持归档。这些都是基本需求,那么再进一步或许还需要固定缓存项数量,支持队列缓存,缓存过期等。

coredatasqlite有无必然联系?coredata是一个关系型数据库吗? iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3Core Data coredata可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用coredata的时候,你不用安装额外的数据库系统,因为coredata使用内置的sqlite数据库。coredata将你app的模型层放入到一组定义在内存中的数据对象。coredata追踪这些对象的改变,同时可以根据需要做相应的改变,例如用户执行撤销命令。当coredata在对你app数据的改变进行保存的时,core data会把这些数据归档,并永久性保存。

mac os xsqlite,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与coredata框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。

Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS)。虽然Core Dta支持SQLite作为一种存储类型,但它不能使用任意的SQLite数据库。Core Data在使用的过程种自己创建这个数据库。Core Data支持对一、对多的关系。

 

第一种:实用属性列表,第二种:对象归档,第三种:嵌入式数据库(SQLite3

第四种:文件写入磁盘

首先是属性列表。nsuserdefaults位于属性列表的最顶层,沙盒写入技术,以及对象的归档,以及第三方的SQLlite,还有就是coredata

首先让我们说说这个属性列表:它是存储相对较小数据量的简洁方式,并且耗费非常低的工作量。但是这个属性列表也是有限制的像刚才我说的存储数据量小的数据,还有就是一些自定义的对象是不能存储的,只能是支持序列化的对象,想字典,数据,字符串,对了还是不能添加UI界面的东西。他们可以以两种不同的方式存储一个是XML,这个XML是一种可读性非常强的格式,另一个是内部专门有的2进制的格式,这种方式速度更快写,数据量更小些。正如我们所说的NSuerdefaults位于属性列表的顶层,因此我们可以轻松的读取并且存储数据。


NSUserDefaults类的使用和NSKeyedArchiver有很多类似之处,但是查看NSUserDefaults的定义可以看出,NSUserDefaults直接继承自NSObjectNSKeyedArchiver继承自NSCoder。这意味着NSKeyedArchiver实际上是个归档持久化的类,也就可以使用NSCoder类的[encodeObject: (id)objv forKey:(NSString *)key]方法来对数据进行持久化存储

 

归档:NSKeyedArchiverNSKeyedUnarchiver

苹果的一个专门记忆模式的实现是归档。把一个对象转化为流便于保存和恢复不用向外部类暴露私有的属性。

声明专辑通过符合NSCoding协议是可以归档的。在专辑头文件写上符合NSCoding协议:@interface Album : NSObject <NSCoding>

在实现文件里面,添加两个方法:

(void)encodeWithCoder:(NSCoder *)aCoder

(id)initWithCoder:(NSCoder *)aDecoder

 

Core Data是一种稳定,功能全面的持久化工具,和之前的一些持久化工具相比,他不需要对实体进行归档,也就是序列化,而是在数据模型编辑器中创建一些实体

在代码中,你不再使用存取方法和修改方法,而是使用键值对编码来设置属性或者减缩他们的值

那么这些托管对象的活动区域在哪  他们位于所谓的持久库中,默认情况下,Core Data应用程序将持久库实现为存储在应用程序文档目录的sqlite数据库。

虽然数据是通过sqlite存储的,但框架中的类将完成加载和保存数据的相关工作。不许要编写任何sql语句。


sqlite3:

数据库对象:sqlite3         数据库指针:sqlite3_stmt

sqlite3_open():打开数据库

sqlite3_prepare():负责编译sql语句

sqlite3_step():只能得到第一行的内容,继续调用该函数直到所有结果都记录完毕

sqlite3_column():sqlite3_step运行的结果读出来

sqlite3_finalize():sqlite3_stmt使用完毕后销毁sqlite3_stmt

sqlite3_close():关闭数据库

sqlite3_exec():执行sql语句

sqlite3_bind_xxx():根据希望使用的数据类型,选择不同的绑定语句。

0 0