最近项目中使用Core Data的时候,Entities 相互关联的时候出现了Warmning,网上发现了一个国外大牛详细理解CoreData的系列文章,讲解很透彻,在此翻译一下,原文链接如下:http://code.tutsplus.com/tutorials/core-data-from-scratch-core-data-stack--cms-20926。
这是系列文章的第一篇。
前言
Core Data 框架已经存在了很多年,有巨多的开发者在iOS、OS X应用中使用Core Data框架。Apple 推荐使用并维护这个框架,因此这个框架有着很好的文档记录。这是一个成熟的框架。其价值不言而喻。
Core Data 充分利用了OC及其 runtime ,巧妙的结合iOS 开发核心基础框架 Core Foundation。这个框架把我们的数据模型用图表的形式来管理,好看又实用。
还有一些不沾弦的废话这里就不翻译了。
学习路线图
这一段基本还是废话,还是翻一点吧。
Core Data 框架开始会让人望而生畏,但是一旦你把所有的难点放在一起并进行了充分的理解,就会发现其提供的API 简单直接。所以很多人在没有充分理解这些puzzle的时候使用Core Data 会麻烦不断。因为他们不知道如何组织并关联这些puzzle。
什么是Core Data
Core Data不是数据库,你也别期待他像database 一样工作,他就是一个管理对象表格的框架而已。
Core Data Stack
Core Data Stack 是 Core Data 的心脏,而Core Data Stack 的最要对象是 NSManagedObjectModel、NSPersistentStoreCoordinator和NSManagedObjectContext。下面我们分别介绍一下这三者。
NSManagedObjectModel
是程序的数据模型,即时Core Data 不是database,但是我们可以拿managed object model 跟database 的模式进行比较,managed object model 包含了models 和 entities 对象图标的信息:他们都有什么属性以及他们之间的相互关系。在NSManagedObjectModel 初始化的时候通过加载一个或多个数据模型而知道数据模型,这点我们以后会详细讲到。NSPersistentStoreCoordinator
能过持久存储数据到磁盘,并且确保持久化仓库和数据模型的兼容性,它负责协调仓库和 managed object context ,同时也负责加载缓存数据,你没听错,Core Data 也有缓存文件创建。如果Core Data是一支交响乐队,present store coordinate 就是他的指挥,虽然在Core Data 中的地位如此重要,但是我们很少直接调用这个指挥官。
NSManagedObjectContext
这个对象是管理 NSManagedObject 的Model集合,可以有多个 managed object context 同时存在,每个context 都是支持persistent store coordinator 的。managed object context 是 我们管理model object 的工作台。我们对model 的增删改查都在这里。加载和保存是persistent store coordinator 处理的。当你使用多线程的时候你可以有多个工作台。
尽管 managed object model和 和 持久化存储协调员 可以跨线程共享,管理对象上下文却不能这样。我们将在本系列的后面详细讨论多线程。