对多对核心数据关系错误调用'count'是否会将集合中的所有对象都带入内存?

时间:2011-08-06 18:10:39

标签: core-data fault

假设我有一个实体'员工'与多个关系'部门'到另一个实体'部门'。如果我有一个Employee对象的实例,而且department集合当前是一个错误,那么获取部门数量的内存最有效的方法是什么?

两个明显的选择是:

1)致电[myEmployee.departments count];

2)构造一个fetchRequest,只返回匹配'employee'关系指向我的employee对象的Department对象,然后调用countForFetchRequest:

除了内存使用之外,这些方法中的一种方法是否会比其他方法快得多?

2 个答案:

答案 0 :(得分:0)

除非您有relationshipKeyPathsForPrefetching,否则不会获取关系。

但是,我最好的建议是始终以最直接的方式实施您的解决方案,然后解决性能问题。众所周知,人类在预测性能问题时表现不佳。

一种非常易于使用的工具是Instruments,它包含在Xcode中。

您可以使用这两种方法轻松运行测试,并实际比较数字,而不是仅仅采纳一些陌生人的意见。

答案 1 :(得分:0)

第一:当调用关系时,对象被加载为“fault”,因此性能非常好。

第二:如果你使用countForFetchRequest方法,请求将是:

int[]

因此CoreData必须检查每个部门以查看员工。在练习中更慢。

  • 在你的情况下,我会使用第一个选项。
  • 如果谓词需要对象的属性,情况会有所不同,因此第一个选项需要整个对象没有错误。在这种情况下,我建议使用countForFetchRequest,但最好的选择是在特定情况下进行比较。