7

假设我有一个实体“员工”,它与另一个实体“部门”有一对多关系“部门”。如果我有一个 Employee 对象的实例,并且部门集合当前出现故障,那么获取部门计数的最有效的内存方法是什么?

两个明显的选择是:

1) 调用[myEmployee.departments count];

2) 构造一个 fetchRequest 以仅返回其匹配的“员工”关系指向我的员工对象的部门对象,然后调用countForFetchRequest:

除了内存使用之外,这些方法中的任何一种是否会比另一种更快?

4

2 回答 2

0

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

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

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

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

于 2012-05-08T14:15:01.083 回答
0

第一:当关系被调用时,对象被加载为“故障”,所以性能非常好。

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

NSFetchRequest *f = Departament.fetchRequest;

f.predicate = [NSPredicate predicateWithFormat:@"ANY employees = %@", employe.objectID];

所以 CoreData 必须检查每个部门以查看员工。在实践中比较慢。

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