itswenb

iOS 什么是Core Data Stack(Translation)
你正在阅读这篇文章,说明你想要更加了解Core Data这个框架,或者你曾经听过Core Data Stack的三...
扫描右侧二维码阅读全文
10
2019/05

iOS 什么是Core Data Stack(Translation)

你正在阅读这篇文章,说明你想要更加了解Core Data这个框架,或者你曾经听过Core Data Stack的三言两语. 那么它到底是什么呢?再用Core Data开发的应用里面起什么作用呢?读完本文你将会学到关于Core Data必备的知识.

重要的话

对于刚学习Core Data的人,Core Data Stack 无疑让他们感到困惑,但事实上并不难.本文会教会你Core Data Stack 的出栈和入栈操作.
千万不要因为嫌麻烦而不去理解,深入理解之后才能让你不深陷其中.

三个对象

在拆分Core Data Stack之前,你需要了解三件事:

  1. 每个基于Core Data 的应用都有一个Core Data Stack;
  2. Core Data Stack对于Core Data应用不可或缺;
  3. Core Data Stack也由三个对象组成;

组成Core Data Stack的三个对象分别是:

1. 一个监管对象模型(a managed object model)
2. 一个监管对象上下文(a managed object context)
3. 一个数据持久化的协调器(a persistent store coordinator)

对你来说是了解每个部分的功能最重要的一个环节.在开始阅读之前,仔细观察下图.下图说明了这三个对象之间是怎样联系起来的:

监管对象模型(Managed Object Model)

每个Core Data应用程序都有一个数据模型,即应用程序包中描述应用程序数据的文件。托管对象模型是NSManagedObjectModel类的一个实例,它加载数据模型并将其公开给Core data堆栈。

在设置应用程序的核心数据堆栈时,托管对象模型从应用程序包加载数据模型。即使Core Data不是数据库,也可以将数据模型与数据库的模式进行比较。它描述应用程序的数据。

监管对象上下文(Managed Object Context)

监管对象上下文(NSManagedObjectContext 类的实例也是Core Data Stack的操作中心。它是您(开发人员)与之交互最多的核心数据堆栈的对象。

托管对象上下文保存对持久存储协调器的引用。为什么会这样,一会儿就会清楚了。

如上所述,Managed Object Context是与您交互最多的Core Data堆栈的对象。事实上,它是您与应用程序的Core Data堆栈交互的方式。您很少与监管对象模型或持久性存储协调器交互。

尽管大多数应用程序都有一个托管对象模型和一个持久存储协调器,但应用程序拥有多个托管对象上下文的情况并不少见。

持久性存储协调器(Persistent Store Coordinator)

持久性存储协调器是核心数据栈的粘合剂。它保存对托管对象模型和托管对象上下文的引用。顾名思义,持久性存储协调器负责应用程序的持久性存储。

尽管托管对象模型和托管对象上下文是核心数据栈不可或缺的核心,但是持久性存储协调器是核心。它通过托管对象模型理解应用程序的数据模型,并管理应用程序的持久存储。

创建核心数据堆栈

现在,您已经知道了涉及哪些对象,接下来我将介绍Core Data堆栈的设置过程。在本教程中,我们不会关注代码。相反,我想关注的是使Core Data堆栈投入使用所涉及的事件。

步骤1

我们需要实例化的第一个对象是托管对象模型。要实例化NSManagedObjectModel类的实例,我们需要从应用程序包加载数据模型。数据模型用于初始化核心数据栈的托管对象模型。
我们需要实例化的第一个对象是托管对象模型。

步骤2

实例化持久性存储协调器需要托管对象模型。在添加应用程序的持久存储之前,持久存储协调器需要了解和理解应用程序的数据模型。
实例化持久性存储协调器需要托管对象模型。

步骤3

只有将持久存储添加到持久存储协调器后,Core Data堆栈才可用。持久存储协调器检查数据模型,并确保持久存储与数据模型兼容。这就是它需要引用托管对象模型的原因之一。它使用托管对象模型来了解应用程序的数据模型。

只有将持久存储添加到持久存储协调器后,Core Data堆栈才可用。

步骤4

应用程序通过托管对象上下文与核心数据栈交互。托管对象上下文保存对持久存储协调器的引用。这就是为什么我们首先需要创建托管对象模型和持久存储协调器,然后才能创建托管对象上下文。

应用程序通过托管对象上下文与核心数据栈交互。

不是每个托管对象上下文都保存对持久存储协调器的引用,但这是另一个教程的主题。

处理数据

托管对象上下文是核心数据应用程序的工作负载。它管理托管对象的集合。如果托管对象上下文需要从持久存储加载数据,它会向持久存储协调器请求该数据。请记住,持久性存储协调器负责持久性存储。持久存储协调器从持久存储中获取托管对象上下文所需的数据。

如果managedobjectcontext希望将更改保存到持久存储,它将这些更改推到持久存储协调器。持久性存储协调器知道如何与持久性存储进行通信,并将更改推送到持久性存储。

在iOS、tvOS和watchOS上,Core Data framework支持三种存储类型:

  1. 一个二进制存储
  2. 一个内存中的存储
  3. SQLite数据库存储

这就是你现在需要知道的一切。我希望您同意Core Data堆栈并没有看上去那么复杂。请记住,Core Data堆栈由三个对象组成,每个对象都有一个特定的角色。

Last modification:May 10th, 2019 at 04:55 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment