托管对象模型和持久对象库之间有什么区别?

时间:2013-10-27 07:19:41

标签: core-data persistent-object-store nsmanagedobjectmodel

来自Apple CoreData框架文档,

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

持久对象存储:持久对象存储在应用程序中的对象和持久存储中的记录之间进行映射。请参阅here

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

我想知道托管对象模型和持久对象库之间的唯一区别是什么。

2 个答案:

答案 0 :(得分:3)

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

持久对象库NSPersistentStore的一个实例,它管理着 来自持久性商店的交易,这是存储库所在的位置 存储实际数据。在许多情况下,持久存储是一个SQLite文件,但它也可以是XML文件,二进制文件或临时数据的“内存”存储。

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

答案 1 :(得分:1)

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

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

    • 但不,持久对象存储不是NSPersistentStore的实例。就像Persistent Store一样,它是一个由Classes组成的文件,它通过Xcode自动声明应用程序中对象/实例与持久存储中的代码串/块之间的路径/关系。可以把它想象成一个超链接文件(虽然它比那复杂得多)
  • 让我们将Persistent Store视为" DataFile.xml / DataFile.sqlite / DataFile.customExtension等"。因为它们是文件,所以所有记录都存储为Script,Binary等。例如:< entityname>交易< / entity>或者<货币> USD< / currency> (没有空间 - 很抱歉该网站不允许添加这些(< ...>))

    • 编译器(在本例中为XCode)可以访问,读取和写入持久存储(文件),但肯定需要两件事:(1)"翻译"按照"指令"从SCRIPT到OBJECT进行解码"蓝图"托管对象模型,(2)与托管对象一样上下文是Xcode在存储之前使用托管对象的临时场所 - 持久对象库扮演类似的角色,但是使用SCRIPT&代替模型(由管理对象模型提供) - >因此,他们是持久对象商店的作用。

在实际编程中,您甚至不需要考虑持久对象存储。它是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:message时,Core Data会为您创建适当类型的存储。"

希望这对你有所帮助。