使用父 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 类从 NSOrderedSet 添加/删除对象