Core Data理论上初步了解

来源:互联网 发布:网络可爱美女图片 编辑:程序博客网 时间:2024/06/03 07:40
Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

在此数据操作期间,不需要编写任何SQL语句。使用此功能,要添加CoreData.framework和导入主头文件<CoreData/CoreData.h>

在Core Data,需要进行映射的对象称为实体(entity),而且需要使用Core Data的模型文件来描述应用的所有实体和实体属性

这里以Person和Card(身份证)2个实体为例子,先看看实体属性和之间的关联关系


我们在使用sqlite的时候,显示在sqlite中存储的数据,然而这个并没有存储用户创建的数据,当然其实我们也可以实现相关的操作,只不过有可能特别的麻烦,如果我们开发过java EE的时候,我们可能会了解到这个数据存储上是很麻烦的。
我们一般存在这个orm的关系进行对数据进行存储。同样ios中的core Data就是体现了面向对象的存储。core Data就相当于java EE中的hibernate。

所以我们在直接用sqlite的时候,一般不用来存储用户的在设备上创建的数据。要存储用户创建的数据,我们一般都是可以通过core Data框架来快速有条理的实现。

core Data 就是用来对sqlite语句的进一步抽象,然后提供一个对象的API进行抽象使用。

一般core Data 作为对象的持久化、对象图管理器。
(简化)
core Data还管理对对象模型的改变,提供撤销的支持,并且确保模型对象间关系的一致性。(即为orm之间的关系),免于写这方面的关系。
所以:core Data 简化了mvc中的模型部分的创建。

(易用性)
core Data 工具集的基础是基于代码API,用于在代码中操作对象。
(还提供了一个图形化的数据建模工具用来定义模型对象)允许定义数据对象、对象特性、该对象和应用程序中的其他对象之间的关系。
所以:我们图形化了View(IB),core Data(CD)简化了视图和模型的创建。因此值剩下Controller需要代码来编写,这样会超级快。

(省内存)
1)core Data使用sqilte作为后台数据存储(为core Data提供一个高性能的查询引擎)。
对比:通过苹果数据文件和或plist进行搜索和排序。core Data提供了更加高的速度。
2)通过在任何的特定时间只读取需要的数据,Core Data API可以节省内存。
eg:通过在任何特定的时间值读取需要的数据,core Data API 不会获取它。


core Data 中又一个faulting功能。

处理数据对象的时候,core Data 提供了很多你期望找到的功能,尤其是NSPredicate 类的谓词过滤数据,使用NSSortDescriptor类排序数据。这些类后面会有了解。

core Data 栈
关键组件:
数据存储(Data store ) 、持久存储协调器(Persistent Store Coordinator)、托管对象模型(Managed Object Model) 、托管对象上下文(Managed Object Context)。在示例中对这个进行理解。

1、数据存储
数据存储是保存 数据的一个文件或者一组文件。它是当保存消息发送到Core Data后实际写入磁盘的文件。
通常移动设备中只用一个数据存储文件就好(也可以是一组文件)。

依赖于创建数据存储的时候的参数,数据存储可以是一个二进制数据文件、一个sqlite数据库 、已给内存中的数据文件。(这个似乎和归档(Archive)没有什么差别)

开发人员从来不会直接访问数据存储,持久存储协调器(DAO)会对数据文件进行访问。
(不需要关系数据存储的实现,只需要将其视为保存所有数据的文件)

2、持久存储协调器
是托管对象上下文和数据存储之间的媒介。
过程:协调器从上下文中获得数据请求并且将它们转发给合适的数据存储。
协调器还允许上下文访问一个或者多个数据存储。就想它们是一个数据存储一样。
协调器是 NSPersistentStoreCoordinator 类的示例。

注意: NSPersistentStoreCoordinator类不是线性安全,也就是不是原子操作,有可能再多线程的时候出现数据的错误。所以在多个线程同时访问多个数据存储的时候,需要为每一个线程创建一个协调器(?)或者手动锁定和解锁单个协调器。

3、托管对象模型
托管对象模型代表的是数据模型框架。    托管对象模型就是NSManagedObjectModel类的实例。
模型是由一组实体组成的,定义了应用程序中的对象,在设计模式的时候指定应用程序的将要处理的数据实体。还可以指定这些实体的特性和定义它们之间的关系
当然:我们在java EE中是可以使用代码来定义模型的,xcode中使用了图形化定义模型。(可以想象为设计中的ER图)
数据模型应该定义应用程序中使用的每一个数据对象。持久协调器依照模型中定义的实体之间的约定使用该模型创建(托管)对象。
通常不使用代码访问对象模型,如果需要,可以使用NSManagedObjectModel类,即为使用托管对象上下文访问从模型实体创建的托管对象。

4、托管对象上下文 简称:上下文  ————> 提供访问托管的数据对象的主要接口。托管对象上下文是NSManagedObjectContext类的实例。
上下文保存所有托管数据对象,托管数据对象是NSManagedObject类的实例或者子类。托管对象上下文是对所有的托管对象进行管理。

可以将上下文想象成为保存所有应用程序数据的沙箱,可以在该上下文中添加对象、删除对象、修改对象与内存中。准备好的时候,上下文可以将这个状态存储到磁盘中(可以看到上下文是将上面的数据转化为要存储的对象,然后再通过协调器存储到数据存储中)。
后台:上下文持久协调器将数据写入到磁盘上的数据存储中。
(在数据提交之前,上下文使用对象模型确保数据的状态对于模型中定义的关系、约束和验证规则是一致的)

上下文获取数据的托管对象来存储,同时通过从数据存储中取回到上下文中,提供给操作和显示在数据的托管对象中。

//上面的这些论述似乎都是垃圾。难以理解。(下一次再整理)











0 0
原创粉丝点击