NSManagedObject、NSManagedObjectContext 和 NSManagedObjectModel 的区别

Posted

技术标签:

【中文标题】NSManagedObject、NSManagedObjectContext 和 NSManagedObjectModel 的区别【英文标题】:Difference Between NSManagedObject, NSManagedObjectContext and NSManagedObjectModel 【发布时间】:2012-05-11 12:36:22 【问题描述】:

core-data 的这三个类[NSManagedObject , NSManagedObjectContext , NSManagedObjectModel ] 有什么区别,我们如何用最简单的方式描述?

【问题讨论】:

【参考方案1】:

在数据库方面:

NSManagedObject = 一行 NSManagedObjectContext = 一个事务 NSManagedObjectModel = 架构

当然,Core Data 不是数据库。

【讨论】:

谢谢。它简短但很棒的答案。如果我们已经使用过 sql,这可能是我们理解核心数据的最简单方法。请提供更多详细信息或任何文章链接,其中此类描述我们可以更好地了解 SQL。 上下文更像是客户端或连接,而不是事务。 一个NSManagedObjectContext 类,在NSManagedObjectModel 实例周围包裹了一个可变层。 @DeepakThakur sqlite 并不是 Core Data 的唯一后端。您还可以使用二进制、XML、内存,甚至自己编写(刚刚看到一个使用Realm)。话虽如此,他们的意思是,如果您以与使用 SQL 数据库相同的方式使用它,您可能会遇到问题。这是真的,无论底层技术如何。【参考方案2】:

来自 CoreData 编程指南:

您可以将managed object context 视为智能便签本。当您从持久存储中获取对象时,您会将临时副本带到便笺簿上,它们在此处形成对象图(或对象图的集合)。然后,您可以随意修改这些对象。 除非您实际保存这些更改,否则持久存储将保持不变。

【讨论】:

- 很好,那么 NSManagedObject 呢?【参考方案3】:

NSManagedObjects 表示存储在数据库中的数据。您可以将它们视为模型对象。

NSManagedObjectContext 允许您从数据库中插入、保存和检索(使用 NSFetchRequest)NSManagedObjects。”

【讨论】:

【参考方案4】:

上下文是你可能会说你的对象在你阅读之后或插入到数据库之前所在的位置

要了解更多信息,请简要阅读这些主题并了解其中的区别

Add an instance of NSManagedObject to NSManagedObjectContext ok, updating the same instance failed

How do I copy or move an NSManagedObject from one context to another?

http://www.cimgf.com/2011/01/07/passing-around-a-nsmanagedobjectcontext-on-the-iphone/

Does an NSManagedObject retain its NSManagedObjectContext?

【讨论】:

【参考方案5】:

NSManagedObject 继承自对象,并添加了由核心数据管理所需的方法。

上下文是保存由核心数据管理的对象的位置,当您从数据库中获取对象或创建对象以保存到该对象时会发生这种情况

对象模型描述了持久存储的核心数据模式

【讨论】:

以上是关于NSManagedObject、NSManagedObjectContext 和 NSManagedObjectModel 的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何将@NSManaged 对象类中的变量初始化为 JSON 值?

NSManagedObject 时间戳更新

如何实现符合 Mappable 的 NSManagedObject 类

Xcode NSManagedObject 子类在它们被标记为非可选时包含可选

Swift 中带有 Core Data 的 KVO 通知

获取实体 NSSet 的最后一条记录?