哪一个更好?获取 NSArray 并在那里搜索,还是从 Core Data 一次获取一个对象?
Posted
技术标签:
【中文标题】哪一个更好?获取 NSArray 并在那里搜索,还是从 Core Data 一次获取一个对象?【英文标题】:Which one is better? Fetch NSArray and search in there, or fetch one object at a time from Core Data? 【发布时间】:2013-11-17 10:20:02 【问题描述】:我需要根据来自网络服务器的数据更新实体。 我从服务器获取了一组对象,这些对象每个都有一个 ID,该 ID 也存储为实体中的一个字段。 对于来自服务器的数据中的每个对象,我在 Core Data 中搜索(对一个对象执行获取请求)对应的 NSManagedObject 并更新/保存它。
我想知道是否最好改为获取 NSManagedObjects 的 NSArray,然后使用 NSPredicate 在 NSArray(在内存中)中搜索具有匹配 ID 的 NSManagedObject。
这是正确的吗?改进会很大吗?
是否有更好的方法来处理此类更新?
【问题讨论】:
【参考方案1】:两者都没有。迭代批次的 id,只获取该批次的实例并在循环中更新它们。测试以优化批量大小(可能从 100 开始,使用核心数据工具检查性能)。这是内存使用和速度之间的权衡。
【讨论】:
【参考方案2】:我会选择你的第二个解决方案。你创建一个谓词像
[NSPredicate predicateWithFormat:@"entityID IN %@", fetchedIDsFromWeb]
请记住,Core Data 内置了许多优化功能,因此即使您获取大量记录,也不一定会对内存造成太大压力。
如果内存变得紧张,或者您可以通过某种方式利用通过网络传入的记录的延迟,批处理可能会很有用。如果提取时间过长,为您的提取请求设置一个合适的fetchBatchSize
可能就足够了。
【讨论】:
以上是关于哪一个更好?获取 NSArray 并在那里搜索,还是从 Core Data 一次获取一个对象?的主要内容,如果未能解决你的问题,请参考以下文章