4

来自苹果 CoreData 框架文档,

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

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

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

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

4

2 回答 2

5

托管对象模型是Core Data 应用程序中使用的模式的一个实例NSManagedObjectModel并描述了该模式。它是从模型文件 中加载的,该文件包含您在核心数据模型检查器中定义的所有实体描述及其属性和关系。所以模型描述了你的对象。

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

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

于 2013-10-27T09:09:10.100 回答
1

不管您的问题经过了很长时间,但它仍然是一个明显的问题,可以帮助其他人澄清和深入探讨这个话题。所以,不要离马丁的答案太远,而是为你做进一步的解释:

  • 是的,Persistent Store 和 Persistent Object Store 完全是两个不同的事情

    • 但是不,持久对象存储不是 NSPersistentStore 的实例。就像 Persistent Store 一样,它是一个由类组成的文件,这些类由 Xcode 自动声明应用程序中的对象/实例之间的路径/关系以及 Persistent Store 中的代码束/块。把它想象成一个超链接文件(尽管它比这复杂得多)
  • 让我们将 Persistent Store 视为“DataFile.xml / DataFile.sqlite / DataFile.customExtension 等”。因为它们是文件,所以所有的记录都以Script、Binary等形式存储。例如:< entityname > Transaction </entity > OR < currency >USD</currency >(无空格 - 抱歉网站不允许添加这些(<...>))

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

在实际编程中,你甚至不需要考虑 Persistent Object Store。这是 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 会为您创建适当类型的存储。”

希望这对你有帮助。

于 2016-09-12T06:41:35.047 回答