假设我有一个实体“员工”,它与另一个实体“部门”有一对多关系“部门”。如果我有一个 Employee 对象的实例,并且部门集合当前出现故障,那么获取部门计数的最有效的内存方法是什么?
两个明显的选择是:
1) 调用[myEmployee.departments count];
2) 构造一个 fetchRequest 以仅返回其匹配的“员工”关系指向我的员工对象的部门对象,然后调用countForFetchRequest:
除了内存使用之外,这些方法中的任何一种是否会比另一种更快?
除非您有 relationshipKeyPathsForPrefetching,否则不会获取关系。
但是,我对您的最佳建议是始终以最直接的方式实施您的解决方案,然后再解决性能问题。众所周知,人类不擅长预测性能问题。
一个非常易于使用的工具是 Instruments,它包含在 Xcode 中。
您可以使用这两种方法轻松运行测试,并实际比较数字,而不是仅仅听取一些陌生人对 SO 的意见。
第一:当关系被调用时,对象被加载为“故障”,所以性能非常好。
第二:如果您使用 countForFetchRequest 方法,请求将是:
NSFetchRequest *f = Departament.fetchRequest;
f.predicate = [NSPredicate predicateWithFormat:@"ANY employees = %@", employe.objectID];
所以 CoreData 必须检查每个部门以查看员工。在实践中比较慢。