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

Core data 托管对象模型和持久对象存储之间有什么区别?,core-data,persistent-object-store,nsmanagedobjectmodel,Core Data,Persistent Object Store,Nsmanagedobjectmodel,从apple CoreData framework文档中 托管对象模型:模型允许核心数据从持久存储中的记录映射到应用程序中使用的托管对象。参考 持久对象存储:持久对象存储映射应用程序中的对象和持久存储中的记录。参考 从这些描述中,两者的含义相同,即用托管对象映射持久存储记录 我想知道托管对象模型和持久对象存储之间的独特区别是什么 managed object model是NSManagedObjectModel的一个实例,描述了核心数据应用程序中使用的模式。 它是从模型文件加载的 其中包含所有实

从apple CoreData framework文档中

托管对象模型:模型允许核心数据从持久存储中的记录映射到应用程序中使用的托管对象。参考

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

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


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

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

持久对象存储是管理 往来于持久性存储的事务,该存储库是 实际数据被存储。在许多情况下,持久存储是SQLite文件,但也可以是XML文件、二进制文件或临时数据的“内存”存储

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

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

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

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

    • 编译器(在本例中为XCode)可以访问、读取和写入持久性存储(文件),但肯定需要两件事:(1)“转换器”按照“蓝图”托管对象模型的“指令”从脚本解码到对象,(2)与托管对象上下文类似,Xcode在存储之前处理托管对象的临时位置-持久对象存储扮演类似的角色,但使用脚本和模型(由托管对象模型提供)代替-->因此,它们是持久对象存储的角色
在实际编程中,您甚至不需要考虑持久对象存储。这是一个自动过程,XCode需要完成所有工作。这是一个抽象的计算过程,而不是一个特定的概念或特定的利害关系(在核心数据堆栈中)

参考苹果公司的核心数据指南(2011年10月-相当老,但仍然活跃)

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


希望这对您有所帮助。

在apple文档中,持久存储仅表示包含应用程序数据的存储(可以是sqlite、XML或二进制)。请参阅这里,@Nandha:该文档还说:“核心数据还提供了一个内存存储,其持续时间不超过进程的生命周期”。您提到了持久存储。但我想知道持久对象存储。持久存储和持久对象存储都是不同的。我想,不是吗?@Nandha:不是,“持久存储”和“持久对象存储”是一回事。在苹果文档中,它们对“持久存储”和“持久对象存储”给出了不同的描述。如果你有机会,请参考我在第一条评论中给出的链接。。。