提取CoreData时终止了到期的内存问题

时间:2018-07-13 10:47:06

标签: ios swift xcode

我正在尝试获取CoreData。我知道数据很多,而且我已经在使用其他实体来保存数据。因此,基本上我只需要读取“旧数据”。问题是当我尝试获取此数据时,我的应用程序崩溃了,因为内存爆炸了。有人知道如何获取这些数据,也许一次只获取一半吗?

1 个答案:

答案 0 :(得分:1)

  

我知道数据很多,并且我已经在使用其他实体来保存数据。

我看不到使用不同实体和内存使用之间的关系。只要您遵循适用于Core Data的内存管理规则,这根本就没有关系(除非您进行了几千个关系的怪异设置)。

基本规则:

  • 如果您循环执行操作,请确保释放自动释放池。
  • 一旦不再需要NSManagedObject实例,并且实例数量消耗了内存,您可以通过在上下文中调用refreshObject:mergeChanges:来将它们变为故障。
  • 您还可以在上下文上调用reset来使所有获取的管理对象无效(请注意,在调用reset后不应使用这些无效的对象)。
  • 提防循环引用-基本上,通过关系绑定的对象具有此类引用,您可能需要将它们手动转换为故障/重置上下文,或者干脆完全丢弃托管对象上下文。

获取数据的提示:

  • 如果需要获取大量数据并且有可能,请使用Dictionary Result Type,因为Dictionary比托管对象实例占用的内存少得多。
  • fetchLimit应用于NSFetchRequest,以限制要提取的对象数。将其与fetchOffset结合使用以获得数据的“窗口”。
  • 还需要考虑'fetchBatchSize'。