插入数千条记录时CoreData(swift)内存问题

时间:2017-01-18 08:18:44

标签: ios swift core-data memory-management

我的应用程序是swift(最新版本)语言,它的数据库结构有点复杂。 我首次在应用启动时转储记录,因为应用必须支持离线信息,我的应用可以拥有数百万条记录。 现在在实体中保存记录,这些实体与大约14-15个实体(一对一和一对多)有关系。 我的应用程序通过内存警告并在大约1000万条记录后被终止。我尝试进行泄漏分析,但是时间应用程序工作正常,但需要很长时间。

我尝试创建单例类的上下文管理器,并尝试在插入一大块记录时创建本地类型的变量。
目前,我正在通过更新我的实体从Web API获取50条记录并保存我的上下文。

我尝试过autoreleasepool,但没有成功。

请建议我该怎么做?

谢谢 阿斯温

3 个答案:

答案 0 :(得分:0)

我可以建议你观看这个视频。它非常鼓舞人心,并解释了许多有关核心数据的有用信息:

https://developer.apple.com/videos/play/wwdc2013/211/

您使用 fetchBatchSize 属性吗?

https://developer.apple.com/reference/coredata/nsfetchrequest/1506558-fetchbatchsize

答案 1 :(得分:0)

如果要在循环中处理大量Core Data对象,则需要定期保存上下文,以便核心数据可以将修改后的对象转换回故障,而不是将它们保留在内存中。您需要保存的频率和时间取决于您的应用程序和您用来处理的代码,在您的问题中查看会很有帮助。您需要尝试自己在速度和内存使用之间找到平衡点。

使用分配工具,您将看到内存的去向。你没有泄漏记忆,你只是使用了太多的记忆。

答案 2 :(得分:-1)

禁用项目的僵尸对象。下面我已经发布了如何禁用zombie对象通过图像跟随它。

有关僵尸对象enter link description here

的更多详细信息

图片1

enter image description here

图片2

enter image description here