托管对象模型和持久性对象存储之间有什么区别



来自苹果CoreData框架文档,

托管对象模型:模型允许 Core Data 从持久存储中的记录映射到您在应用程序中使用的托管对象。参考这里。

持久对象存储

:持久对象存储映射应用程序中的对象和持久存储中的记录。参考这里。

从这些描述来看,两者的含义与将持久存储记录映射到托管对象的含义相同。

我想知道托管对象模型和持久对象存储之间的独特区别是什么。

托管对象模型NSManagedObjectModel的实例,它描述核心数据应用程序中使用的架构。它是从模型文件加载的其中包含所有实体描述及其属性和关系您在核心数据模型检查器中定义。因此,模型描述了您的对象。

持久对象存储NSPersistentStore 的一个实例,它管理与持久存储区之间的事务,持久存储区是存储库,其中实际数据被存储。在许多情况下,持久存储是 SQLite 文件,但它也可以是 XML 文件、二进制文件或临时数据的"内存中"存储。

持久存储协调器同时使用:NSManagedObjectModel和(一个或多个) NSPersistentStore s,以加载托管对象从存储到应用程序中,并将更改的对象写回存储。

不管你的问题已经过去了很长时间,但它仍然是一个明确的问题,可能有助于其他人澄清和深入研究这个话题。所以,不要离马丁的答案太远,而是为你进一步解释:

  • 的,持久存储和持久对象存储完全是两个不同的问题

    • 但是不,持久对象存储不是NSPersistentStore的实例。就像持久存储一样,它是一个由类组成的文件,这些类通过 Xcode 自动声明应用程序中的对象/实例与持久存储中的代码束/块之间的路径/关系。把它想象成一个超链接文件(尽管它比这复杂得多)
  • 让我们将持久存储视为"DataFile.xml/DataFile.sqlite/DataFile.customExtension等"。因为它们是文件,所以所有记录都存储为脚本、二进制等。例如:<实体名称>交易或<货币>美元(无空格 - 抱歉网站不允许添加这些(<...>))

    • 编译器(在本例中为 XCode)可以访问、读取和写入持久存储(文件),但肯定需要 2 件事:(1) "转换器"按照"蓝图"托管对象模型的"指令"从脚本解码为对象,(2) 像托管对象上下文是 Xcode 在存储之前使用托管对象的临时位置 - 持久对象存储扮演类似的角色, 但是使用 SCRIPT 和 MODEL(由托管对象模型提供)代替 -->,它们是持久对象存储的角色。

在实际编程中,您甚至不需要考虑持久对象存储。这是一个自动的过程,XCode需要。这是一个抽象的计算过程,而不是一个特定的概念或特定的权益(在核心数据堆栈中)

参考Apple的核心数据指南(2011年10月 - 相当古老但仍然活跃)https://developer.apple.com/library/prerelease/content/documentation/DataManagement/Devpedia-CoreData/persistentObjectStore.html#//apple_ref/doc/uid/TP40010398-CH31-SW1

-

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

希望这对您有所帮助。

最新更新