所以我浏览堆栈以获得我的问题的答案,每个人都说计数请求是要走的路。当我在我的应用上运行单元测试时,我发现这是假的。
for number in largeNumber { //large number is 1000
let fetch = try self.context.fetch(fetchRequest)
}
操作花了0.2秒!!
,而
{{1}}
//操作耗时0.158秒!
所以大家都在喋喋不休地说计数请求更有效率。如果有的话,它会变得更糟。也就是说,是否有更有效的方法来检查核心数据中是否存在值
答案 0 :(得分:0)
您的测试结果可能是由于两个版本中所做的不同。 计数返回找到的托管对象的数量。 获取可能会填充属性,关系等。
核心数据可能会缓存此信息,以便不必重复相同的提取请求。结果(在您的示例中)可能相当于1个获取请求和999个无操作。
Count应该是最有效的,因为它不会填充托管对象。如果循环1000次但每次传递的谓词不同会发生什么?