掌握CoreData(第2部分核心数据栈)

核心数据栈

了解核心数据堆栈非常重要。 许多开发人员不花时间去学习它,这在使用Core Data时使他们的生活陷于瘫痪。 核心数据堆栈是框架对象的集合,这些框架对象是核心数据初始化过程的一部分, 可以在应用程序中的对象与外部数据存储之间进行调解 。 该堆栈提供了与数据模型层对象关联的所有功能或任务。 我们在第1部分中讨论的功能

核心数据堆栈由以下对象组成→一个或多个托管对象上下文连接到单个持久性存储协调器,该协调器又连接到一个或多个持久性存储。

托管对象上下文(MOC)

它的主要职责是管理一组托管对象(实体)。 受管对象上下文通常在内存中维护实体的状态。

完成对此类对象的操作后,您将保存此类MOC,通常将其保存到持久性存储协调器到持久性存储

位于核心数据堆栈的顶部,您的应用程序将与大多数应用程序进行交互,因此它是暴露给应用程序其余部分的应用程序

应用程序可以为每个堆栈创建一个或多个 MOC。 上下文连接到持久性存储协调器或来自父上下文

它提供缓存,更改跟踪,延迟加载,重做,撤消和验证功能

持久性存储协调员(PSC)

NSPersistentStoreCoordinator的实例。 协调器是核心数据堆栈中的中心对象。

持久存储协调器的作用是管理多个/单个存储 ,并向其管理对象上下文提供单个统一存储的外观,如下图所示,该图协调器与多个存储进行通信。

它具有对托管对象模型的引用,如下图2.1所示。 持久性存储协调员可以交谈或引用堆栈中的大多数组件

永久商店

您可以将持久性存储视为数据库文件(Sqlite),其中的每个记录均包含托管对象(实体)的最后保存值。

核心数据还提供了一个内存存储,其存储时间不超过流程生命周期的时间

我们可以在每个堆栈上创建多个持久性存储

Core Data为持久性存储提供了三种本机文件类型:二进制,XML和SQLite。 如果您希望Core Data与自定义文件格式或服务器进行互操作,则可以实现自己的商店类型

被管理对象

NSManagedObject的实例。 它代表持久性存储中的记录

向托管对象上下文注册托管对象。 在任何给定的上下文中,最多存在一个与持久存储中给定记录相对应的托管对象实例

托管对象模型

托管对象模型是一组对象,这些对象一起构成了一个蓝图,描述了您在应用程序中使用的托管对象

您的应用程序中使用的模型对象的架构

持久对象库

持久性对象存储在应用程序中的对象之间映射,并在持久性存储中记录。

Core Data支持的不同文件类型有不同的持久对象存储类

如果要支持自定义文件类型,也可以实现自己的文件

您不会直接创建持久对象存储。 相反,Core Data在发送时会为您创建适当类型的存储
向持久性存储协调器发送的addPersistentStoreWithType:configuration:URL:options:error:消息。

摘要

在这一部分中,我们讨论了核心数据栈。 这部分目的是将理论上的东西放在一个地方。 如果您对核心数据栈一无所知,请不要担心我们何时进行编码部分,当我引用这些要点时,这些要点将变得清楚。
但是您应该指出,Core数据栈对于Core数据的工作至关重要。 Core Data在此堆栈的帮助下提供了所有功能。 核心数据堆栈具有许多组件,每个组件都有其作用。 顶部组件是MOC,底部组件是持久性存储,其中存储了实际数据。

有用的链接

https://store.raywenderlich.com/products/core-data-by-tutorials

https://www.objc.io/issues/4-core-data/core-data-overview/

https://zh.wikipedia.org/wiki/Object-relational_mapping

https://cocoacasts.com/what-are-core-data-entities-and-attributes

https://cocoacasts.com/what-is-the-core-data-stack

https://developer.apple.com/library/archive/documentation/DataManagement/Devpedia-CoreData/coreDataStack.html

https://medium.com/@ankurvekariya/core-data-crud-with-swift-4-2-for-beginners-40efe4e7d1cc

https://www.raywenderlich.com/7569-getting-started-with-core-data-tutorial

https://developer.apple.com/library/archive/qa/qa1952/_index.html