使用父 NSManagedObject 上的关系枚举子实体 VS 使用 NSFetchRequest

Posted

技术标签:

【中文标题】使用父 NSManagedObject 上的关系枚举子实体 VS 使用 NSFetchRequest【英文标题】:Enumerating over child entities using relationship on parent NSManagedObject VS using NSFetchRequest 【发布时间】:2013-04-09 22:06:59 【问题描述】:

假设我有一个具有一对多关系属性的 NSManagedObject 子类的实例。性能方面,类似

for (id item in parent.children) 
   // do something with an item

与使用新的 NSFetchRequest 来获取这些孩子的数组并枚举该数组相比?有什么区别吗?

【问题讨论】:

【参考方案1】:

如果您知道您将迭代所有 NSManagedObject 的关系 您原来的 NSFetchRequest 应该使用以下方法预取这些关系:setRelationshipKeyPathsForPrefetching:。 在这种情况下,您已经支付了原始提取的成本(当时可能更低)。

如果您在访问每个 object.relation 时不预取,则必须转到核心数据以填充该关系。它可能比新的 Fetch 请求更好。 但是如果你真的想做一个新的 Fetch 请求,不要每次都从头开始创建一个,使用同一个。并使用带有predicateWithSubstitutionVariables: 的谓词来避免每次都从头开始创建一个谓词。从头开始创建新谓词很昂贵。

【讨论】:

以上是关于使用父 NSManagedObject 上的关系枚举子实体 VS 使用 NSFetchRequest的主要内容,如果未能解决你的问题,请参考以下文章

在后台创建的 NSManagedObject 变成了主线程上的错误

子类化一个 NSManagedObject 子类

自定义 NSManagedObject 类从 NSOrderedSet 添加/删除对象

CoreData 使用父实体创建 NSManagedObject 子类

NSManagedObject 子类中的泛型类型

在另一个版本中更改 NSManagedObject 父实体