我需要根据来自Web服务器的数据更新实体。 我从服务器获取了一个对象数组,这些对象每个都有一个ID,它也作为一个字段存储在实体中。 对于来自服务器的数据中的每个对象,我搜索(对一个对象执行获取请求)以获取Core Data中相应的NSManagedObject并更新/保存它。
我想知道是否更好地获取NSManagedObjects的NSArray,然后使用NSPredicate在NSArray(在内存中)中搜索具有匹配ID的NSManagedObject。
这是否正确并且改进是否显着?
是否有更好的方法来处理此类更新?
答案 0 :(得分:1)
都不是。迭代批量的id仅获取该批次的实例并在循环中更新它们。测试以优化批量大小(可能从100开始,使用核心数据仪器检查性能)。这是内存使用和速度之间的权衡。
答案 1 :(得分:0)
我会选择你的第二个解决方案。您可以创建一个类似
的谓词[NSPredicate predicateWithFormat:@"entityID IN %@", fetchedIDsFromWeb]
请记住,Core Data内置了许多优化功能,因此即使您获取大量记录,它仍然不一定会对内存造成太大压力。
如果内存变得紧张或者你可以某种方式利用通过网络传入的记录的延迟,那么批处理可能很有用。如果提取时间过长,则可能足以为您的提取请求设置合适的fetchBatchSize
。