Core Data
其实并没有想象的那么麻烦,对于对象的持久化存储依然是一个不错的选择。
Core Data
这个框架有几个核心的类,类名很长,也不怎么好记,所以不仔细去研究各自的职责以及相互之间的关系,很容易让人产生退却心理。现在,我会根据下面来说明一下各类的作用和关系。
如果我们在创建工程的时候勾选的 Core Data 选项,系统会默认帮我们创建一个后缀名为
xcdatamodeld
的文件,这个文件对应的类其实是NSManagedObjectModel
,我们操作文件,这是一个可视化过程,当操作完毕后只需要调用这个类的方法来创建就可以了。然后
xcdatamodeld
这个文件里创建的是一个个具有不同结构的实体Entity
,你可以为这些实体添加属性,建立相互关系,为属性添加语义等操作,操作结束后通过 Xcode - Editor - Create NSManagedObject subclass 来创建NSManagedObject
的子类,没错,也就是说实体的主要职责是描述结构,而要表现在代码上还是要生成这个类的子类,这个子类就代表着这个实体然而要如何生成
NSManagedObject
子类的实例呢?并不是通过alloc
创建,而是通过NSEntityDescription
这个类来创建,在创建的方法中,需要传入一个NSManagedObjectContext
类型的参数,而返回值则是一个NSManagedObject
类型的对象,这里显然使用的是多态的概念,用父类的指针指向了子类的对象。那么,这个NSManagedObjectContext
又是什么呢?根据下图你可以发现,每一个这个类的对象都包含着许多NSManagedObject
,这里的包含其实是一种管理,由这个类来管理你所创建的实体对象,它会记录对象属性值的改变,也能够用来添加和删除对象,不过这些操作并没有保存到本地NSManagedObjectContext
相当于是一个暂存器,并不能永久保存。-
这里就引入了另外一个类,也就是
NSPersistentStoreCoordinator
,它是连接两者的桥梁,一方面接收 context 传来的数据改变,另一方面和存储器沟通,你需要为 context 设置这个类,关于这个类的其他东西便不需要操作,我们主要操作的是 Context
但是,我们平常使用的时候并不会对操作多个 context,通常的情况是下图所示: