Core Data

2016-08-04  本文已影响13人  雨雪传奇

Core Data其实并没有想象的那么麻烦,对于对象的持久化存储依然是一个不错的选择。
Core Data这个框架有几个核心的类,类名很长,也不怎么好记,所以不仔细去研究各自的职责以及相互之间的关系,很容易让人产生退却心理。现在,我会根据下面来说明一下各类的作用和关系。

  1. 如果我们在创建工程的时候勾选的 Core Data 选项,系统会默认帮我们创建一个后缀名为 xcdatamodeld的文件,这个文件对应的类其实是NSManagedObjectModel,我们操作文件,这是一个可视化过程,当操作完毕后只需要调用这个类的方法来创建就可以了。

  2. 然后xcdatamodeld这个文件里创建的是一个个具有不同结构的实体Entity,你可以为这些实体添加属性,建立相互关系,为属性添加语义等操作,操作结束后通过 Xcode - Editor - Create NSManagedObject subclass 来创建NSManagedObject的子类,没错,也就是说实体的主要职责是描述结构,而要表现在代码上还是要生成这个类的子类,这个子类就代表着这个实体

  3. 然而要如何生成NSManagedObject子类的实例呢?并不是通过alloc创建,而是通过NSEntityDescription这个类来创建,在创建的方法中,需要传入一个NSManagedObjectContext类型的参数,而返回值则是一个NSManagedObject类型的对象,这里显然使用的是多态的概念,用父类的指针指向了子类的对象。那么,这个NSManagedObjectContext又是什么呢?根据下图你可以发现,每一个这个类的对象都包含着许多NSManagedObject,这里的包含其实是一种管理,由这个类来管理你所创建的实体对象,它会记录对象属性值的改变,也能够用来添加和删除对象,不过这些操作并没有保存到本地NSManagedObjectContext相当于是一个暂存器,并不能永久保存。

  4. 这里就引入了另外一个类,也就是NSPersistentStoreCoordinator,它是连接两者的桥梁,一方面接收 context 传来的数据改变,另一方面和存储器沟通,你需要为 context 设置这个类,关于这个类的其他东西便不需要操作,我们主要操作的是 Context

    复杂的 Core Data 堆栈图

但是,我们平常使用的时候并不会对操作多个 context,通常的情况是下图所示:


精简的 Core Data 堆栈图
上一篇 下一篇

猜你喜欢

热点阅读