OC数据持久化
来源:互联网 发布:阿里云logo矢量图 编辑:程序博客网 时间:2024/06/06 01:31
OC中有哪些数据存储方式,各有什么区别?
四种存储方式:
1.NSUserDefaults,用于存储配置信息
2.SQLite,用于存储查询需求较多的数据
3.CoreData,用于规划应用中的对象
4.使用基本对象类型定制的个性化缓存方案.
NSUserDefaults:对象中储存了系统中用户的配置信息,开发者可以通过这个实例对象对这些已有的信息进行修改,也可以按照自己的需求创建新的配置项。
SQLite擅长处理的数据类型其实与NSUserDefaults差不多,也是基础类型的小数据,只是从组织形式上不同。开发者可以以关系型数据库的方式组织数据,使用SQL DML来管理数据。一般来说应用中的格式化的文本类数据可以存放在数据库中,尤其是类似聊天记录、Timeline等这些具有条件查询和排序需求的数据。
CoreData是一个管理方案,它的持久化可以通过SQLite、XML或二进制文件储存。它可以把整个应用中的对象建模并进行自动化的管理。从归档文件还原模型时CoreData并不是一次性把整个模型中的所有数据都载入内存,而是根据运行时状态,把被调用到的对象实例载入内存。框架会自动控制这个过程,从而达到控制内存消耗,避免浪费。无论从设计原理还是使用方法上看,CoreData都比较复杂。因此,如果仅仅是考虑缓存数据这个需求,CoreData绝对不是一个优选方案。CoreData的使用场景在于:整个应用使用CoreData规划,把应用内的数据通过CoreData建模,完全基于CoreData架构应用。使用基本对象类型定制的个性化缓存方案:从需求出发分析缓存数据有哪些要求:按Key查找,快速读取,写入不影响正常操作,不浪费内存,支持归档。这些都是基本需求,那么再进一步或许还需要固定缓存项数量,支持队列缓存,缓存过期等。
coredata和sqlite有无必然联系?coredata是一个关系型数据库吗? iOS中可以有四种持久化数据的方式:属性列表、对象归档、SQLite3和Core Data coredata可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。coredata提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用coredata的时候,你不用安装额外的数据库系统,因为coredata使用内置的sqlite数据库。coredata将你app的模型层放入到一组定义在内存中的数据对象。coredata会追踪这些对象的改变,同时可以根据需要做相应的改变,例如用户执行撤销命令。当coredata在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。
mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,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直接继承自NSObject而NSKeyedArchiver继承自NSCoder。这意味着NSKeyedArchiver实际上是个归档持久化的类,也就可以使用NSCoder类的[encodeObject: (id)objv forKey:(NSString *)key]方法来对数据进行持久化存储
归档:NSKeyedArchiver,NSKeyedUnarchiver
苹果的一个专门记忆模式的实现是归档。把一个对象转化为流便于保存和恢复不用向外部类暴露私有的属性。
声明专辑通过符合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():根据希望使用的数据类型,选择不同的绑定语句。
- OC数据持久化
- OC 数据持久化存储
- Oc Plist 持久化
- OC-NSUserDefaults(简单数据持久化存储机制)
- OC数据持久化方案2-NSKeyedArchiver归档
- Snail—OC学习之本地数据持久化(plist)
- Snail—OC学习之本地数据持久化(归档)
- OC 中数据持久化 sqlite3 的使用
- OC 文件操作 持久化
- OC数据持久化方案1-NSUserDefaults与属性文件(plist)
- Oc 数据持久化Plist、SQLite、CoreData、FMDB四种-demo
- 什么是数据持久化?
- 数据持久化
- 数据持久化
- 什么是数据持久化
- 数据持久化
- 数据持久化
- redis数据持久化
- DAY01_Q2
- hdu5733内切球
- Android中ViewFlipper的使用详解
- react listview最上方空白
- 安装phpredis扩展
- OC数据持久化
- jQuery.nivo.slider.js 幻灯片图片切换
- 设计模式之观察者模式
- 安卓学习笔记---RecyclerView的五大开源项目-解决办法
- RecyclerView添加Header的正确方式
- Can you find it?(二分)
- 【Light】[1137]Expanding Rods
- IO流4(补充
- tools:replace="android:icon" 的作用和替代方法