本文暂时还是半成品
对于读者:暂时不建议阅读学习这篇文章:
在栈上没有讲太详细,后面跟 CoreDataStack 类那篇文章结合成一篇文章。
或者这篇文章当做一个所有Core相关类的索引。
NSManagedObjectContext
表示被操作数据的上下文环境。类似于一种持续性的数据库连接,可以做增删查等操作。
而且只有在调用Save方法的时候,这些所有的改动才会被提交,否则是不会在持久层做任何改动的。
支持撤销和重做。
NSManagedObjectModel
表示被管理的数据模型,这里包含着所有对象的表格信息,所有数据结构,包括他们之间的关系。
在这里添加实体的属性,添加实体和实体之间的关系。
所以NSManagedObjectModel
其实包含着NSEntityDescription
和NSPropertyDescription
,前者相当于数据库中的一个表,后者相当于表中的一列。NSPropertyDescription
可以描述实体的基本属性(Attributes)、实体之间的关系(Relationships
)还有 查询属性(FetchedProperty
)。
查询属性对应NSFetchedPropertyDescription
对象。
Persistent Store
持久化存储层,是由文件或者外部数据库组成的,大多数情况下访问持久化层全部由上下文Context来完成。
CoreData 提供了四种持久化层的方案:
非原子访问的:NSQLiteStoreType
原子访问的:BSXMLStoreType
、NSBinaryStoreType
、NSInMemoryStoreType
。
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 Object
的Context
,那么在Object
的很长的生命周期中就会一直跟这个特定的Context
关联。一个应用程序可以有很多个
Context
,你可以创建两个Context
指向一些相同的PersistentStore
持久化层。Context
并不是线程安全的,所以对于Managed Object
也是一样的,它们只可以在创建他们的那个线程上进行操作。