掌握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