Ios 哪一个更好?获取NSArray并在其中搜索,还是从核心数据中一次获取一个对象?

Ios 哪一个更好?获取NSArray并在其中搜索,还是从核心数据中一次获取一个对象?,ios,objective-c,core-data,Ios,Objective C,Core Data,我需要根据来自web服务器的数据更新实体。 我从服务器获取一个对象数组,这些对象都有一个ID,该ID也作为字段存储在实体中。 对于来自服务器的数据中的每个对象,我在核心数据中搜索(对一个对象执行提取请求)相应的NSManagedObject并更新/保存它 我想知道,取而代之的是获取NSManagedObject的NSArray,然后使用NSPredicate在NSArray(内存中)中搜索具有匹配ID的NSManagedObject是否更好 这是否正确,改进是否显著 有没有更好的方法来处理此类更

我需要根据来自web服务器的数据更新实体。 我从服务器获取一个对象数组,这些对象都有一个ID,该ID也作为字段存储在实体中。 对于来自服务器的数据中的每个对象,我在核心数据中搜索(对一个对象执行提取请求)相应的NSManagedObject并更新/保存它

我想知道,取而代之的是获取NSManagedObject的NSArray,然后使用NSPredicate在NSArray(内存中)中搜索具有匹配ID的NSManagedObject是否更好

这是否正确,改进是否显著


有没有更好的方法来处理此类更新?

都没有。迭代ID批次,仅获取该批次的实例,并在循环中更新它们。测试以优化批量大小(可能从100开始,使用core data instrument检查性能)。这是内存使用和速度之间的权衡。

我会选择您的第二种解决方案。您可以创建一个谓词,如

[NSPredicate predicateWithFormat:@"entityID IN %@", fetchedIDsFromWeb]
请记住,核心数据内置了许多优化功能,因此即使您获取了大量记录,也不一定会对内存造成太大压力

批处理可能很有用,无论是在内存变得紧张的情况下,还是在您能够以某种方式利用通过web传入的记录的延迟的情况下。如果提取时间太长,为提取请求设置合适的
fetchBatchSize
就足够了