Core Data 中涉及的基本对象简介(概念)

本文暂时还是半成品
对于读者:暂时不建议阅读学习这篇文章:
在栈上没有讲太详细,后面跟 CoreDataStack 类那篇文章结合成一篇文章。
或者这篇文章当做一个所有Core相关类的索引。


NSManagedObjectContext

表示被操作数据的上下文环境。类似于一种持续性的数据库连接,可以做增删查等操作。

而且只有在调用Save方法的时候,这些所有的改动才会被提交,否则是不会在持久层做任何改动的。

支持撤销和重做。

NSManagedObjectModel

表示被管理的数据模型,这里包含着所有对象的表格信息,所有数据结构,包括他们之间的关系。

在这里添加实体的属性,添加实体和实体之间的关系。

所以NSManagedObjectModel其实包含着NSEntityDescriptionNSPropertyDescription,前者相当于数据库中的一个表,后者相当于表中的一列。NSPropertyDescription可以描述实体的基本属性(Attributes)、实体之间的关系(Relationships)还有 查询属性(FetchedProperty)。

查询属性对应NSFetchedPropertyDescription对象。

Persistent Store

持久化存储层,是由文件或者外部数据库组成的,大多数情况下访问持久化层全部由上下文Context来完成。

CoreData 提供了四种持久化层的方案:

非原子访问的:NSQLiteStoreType
原子访问的:BSXMLStoreTypeNSBinaryStoreTypeNSInMemoryStoreType

XML是将数据存为XML文件,只在 OS X 平台下可用。Binary的方法是存为一个Data文件。InMemory的方式是不会对数据进行真正意义上的持久化,全部存储在内存中,当应用程序退出时,数据也就消失了。

NSPersistentStoreCoordinator

持久化存储助理的存在相当于和数据持久层的连接器,SQLite的话就是和数据库的连接,它设置着数据库的路径名字、位置、存储方式和存储的时机。
CoreData其实就相当于一个栈,栈的底层是持久化存储层,栈顶是Context,所以一般简单的需求我们只需要使用栈顶的Context,那么NSPersistentStoreCoordinator就是栈中层的一层存在,协调上栈的上下层关系。

负责理解NSManagedObjectModel和去NSPersistentStore中执行相应操作。

补充NSManagedObjectContext

NSManagedObjectContext就像内存中的便签纸,临时修改你的ManagedObject,所以知道你提交save(),否则持久化层是不会有变化的。

  • 上下文管理这Managed Object的生命周期,管理的同时提供了很多高级特征可以给以使用,比如排序,Validation、关系管理等。

  • 一个Managed Object是不能独立于Context存在的,即有Managed Object就一定会有它的Context,也可以通过 Managed Object 的.managedObjectContext属性取得它的Context对象。

  • 一旦设置了Managed ObjectContext,那么在Object的很长的生命周期中就会一直跟这个特定的Context关联。

  • 一个应用程序可以有很多个Context,你可以创建两个Context指向一些相同的PersistentStore持久化层。

  • Context并不是线程安全的,所以对于Managed Object也是一样的,它们只可以在创建他们的那个线程上进行操作。

你可能感兴趣的:(Core Data 中涉及的基本对象简介(概念))