哪一个更好?获取 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 一次获取一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

显示 ProgressDialog Android

未找到打印搜索的问题

ios NSArray 获取 2 个索引之间的所有索引

从用户那里获取 2 个输入并在 PLSQL 中调用过程

获取并本地过滤 NSArray 或多次执行 fetchRequest

如何检测拖动到那里的子视图中的触摸(或获取哪个子视图位于其父视图中的点击下方的最快方法)