使用 Core Data 获取大量对象,后果是啥?

Posted

技术标签:

【中文标题】使用 Core Data 获取大量对象,后果是啥?【英文标题】:Fetching lots of objects with Core Data, what are the consequences?使用 Core Data 获取大量对象,后果是什么? 【发布时间】:2011-05-04 16:06:36 【问题描述】:

执行一个检索很多对象的NSFetchRequest 会不会很痛苦,可能在 3 ~ 5K 左右?我了解 Core Data 使用一种称为“故障”的东西来确保对象在实际需要之前不在内存中。因此,如果我在 NSArray 中获取 5K 个对象,这意味着这些对象实际上只是占位符,直到我真正访问它们的属性?这是一种不好的做法吗?

【问题讨论】:

Core Data 高度优化;我不认为那是你会遇到麻烦的地方。您应该始终问的问题是,为什么您需要同时在内存中存储 5k 个对象?用户可以与那么多人互动吗?如果您需要全部处理它们,您可以顺序化吗?等等。 一点也不;用户一次只能与他们交互一个。问题是我需要洗牌。据我所知,没有办法进行“随机获取请求”,所以我想我只是将它们全部获取,然后自己进行洗牌。 你是如何获取它们的 - 是否有索引或任何具有已知范围的东西?您可以在该范围内随机化以生成随机提取。 是的,我可以使用排序描述符并每次设置随机 fetchOffset,但我还需要保证没有对象被交互两次。我可以跟踪我使用过的所有 fetchOffsets,但最终它也会变成一个 3K ~ 5K 对象的数组。 如果 fetchOffset 是 int 或 long,那么 5k 没什么大不了的。否则,您可以使用“hasInteracted”=TRUE 更新核心数据行,如果您得到 TRUE,则获取下一个随机数据行。或者,您可以在获取后将其删除,或者将其移至另一个表,这取决于您是否可以在必须重新开始时轻松重新生成数据。 【参考方案1】:

Core Data 经过高度优化,应该能够处理 3-5k 个对象。您需要凭经验确定这会如何影响应用的运行时内存消耗。

【讨论】:

以上是关于使用 Core Data 获取大量对象,后果是啥?的主要内容,如果未能解决你的问题,请参考以下文章

向 Core Data 添加唯一对象

Core Data 中的“索引”到底是啥?

在 Core Data 中加载具有关系的托管对象时的标准行为是啥?

将来自不同表(实体)的 2 个特定托管对象与 Core Data 保持关联的最佳方法是啥?

Swift 中大量 Core Data 批量插入的内存泄漏

解释 Core Data 验证消息并在 iPhone 上显示它们的好模式是啥?