使用 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 中加载具有关系的托管对象时的标准行为是啥?