IOS数据持久化之Core Data(一) - 框架说明

Core Data是一套用来解决对象生命周期管理、对象关系图管理以及持久化方面问题的框架,
在大多数情况下我们使用Core Date做为持久化数据的解决方案,它提供了对象-关系映射(ORM)的功能,利用它可以将OC对象转化为数据保存在SQLite中,同时也能够将保存的数据还原成OC对象

用图像描述如下:

左边是关系模型,右边是对象模型,利用Core Data可以很容易的完成两者的相互转化

Core Data持久化最终存储的数据文件类型可以使SQLite数据库、XML文件、二进制文件、以及内存中


当我们使用Core Data作为持久化解决方案时,自上而下可以分为如下几层(称为Core Data Stack):
Core Data Stack有下列对象组成:一个或者多个管理上下文对象(NSManagedObjectContext),一个持久化存储协调器(NSPersistentStoreCoordinator)以及存储协调器连接的一个或者多个数据存储(Persistent Object Store),图形表示如下:


Core Data的核心对象

1、NSManagedObjectContext
被管理数据的上下文对象,负责应用与数据库之间的交互,对数据进行增、删、改、查(CURD),通过它可以对NSManagedObject进行增、删、改、查等操作,在没有对其存储到外部文件之前,所有的操作都会在NSManagedObjectContext对象中存储,如下图:



2、NSManagedObjectModel
被管理的数据模型、数据结构,包含各实体信息的定义以及各实体之间的关系,可以理解为数据库表结构的对象表现形式
NSManagedObjectModel对象是NSEntityDescription实例对象的集合,一个EntityDescription Object描述了数据库中一个数据表实体,包括表名称、表对应的NSManagedObject对象的名称、属性(Attributes)和关系(Relationships)等。

3、NSPersistentStoreCoordinator
持久化存储协调器,用来管理Persistent Object Store对象的集合(设置数据存储的名字、位置、存储方式、存储时机),
每个PersistentObject Store对应一个外部存储文件(Persistent Store),
如下图所示,描述了PersistentStore Coordinator在Core Data 框架中的作用



4、NSManagedObject
被管理的数据记录,一个NSManagedObject对象对应着表中的一条记录,下图展示了NSManagedObject对象与数据库表记录直接的关系:

5、NSFetchRequest
数据请求,相当于查询语句,通过类NSEntityDescription来描述实体对象,类NSPredicate提供过滤条件,类NSSortDescriptor对查询结果做排序等
如下图所示,描述了一条记录是如何通过NSManagedObjectContext查询出来的。

6、NSEntityDescription
表实体结构,用来描述实体


备注:.xcdatamodel文件编译后为.momd或者.mom文件


使用Core Data进行数据存储的整个流程如下:在进行数据存储之前我们需要考虑以什么格式对数据进行存储,所以需要先进行数据表的设计
设计好的数据模型会以Managed Object Model的形式存在于内存中。采用面向对象的思想进行表的设计时,
每一张表描述着一种实体(NSEntityDescription),一份NSManagedObjectModel则包含着多种NSEntityDescription。

我们可以根据NSEntityDescription在内存中创建对象,或者将相应的内存数据存储到外部文件中(严格地讲,这里不一定是外部存储文件)。
根据NSEntityDescription创建出来的对象比较特殊,我们称之为NSManagedObject。由于它的特殊性,当我们要创建一个NSManagedObject对象时,
我们需要为其提供一个生存环境,称之为NSManagedObjectContext。我们将其称为NSManagedObject的上下文。我个人觉得这种说法挺合适的,
因为NSManagedObjectContext记录着存在于其中的NSManagedObject的生命周期、变化状态等。
一份NSManagedObjectContext实例作为NSManagedObject在内存中的缓存地带,我们可以从外部存储文件中读取或者临时创建一批NSManagedObject对象到其中,
然后在context中做CURD操作。不论是从本地读取数据,或者是将数据存储到本地文件中,都需要经过context的把关。

当我们要将内存中的数据根据NSManagedObjectModel进行持久化时,我们需要一个新的角色来做中间层:NSPersistentStoreCoordinator类。它位于context和存储文件之间,与NSManagedObjectModel结合,来为context服务,负责将context中的对象信息存储下来,或者将存储文件中的数据读取到context中。

最后就是存储文件NSPersistentStore了,可以是SQLite、二进制或者XML文件格式等。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值