Core Data拒绝清除内存中的外部数据引用

时间:2015-01-15 05:49:37

标签: ios core-data memory-management

我将大量数据加载到具有后台NSManagedObjectContext的后台线程上的Core Data中。我经常在保存后重置此背景上下文,以便从内存中清除对象图。操作完成后,上下文也会被处理掉。

问题在于,无论我做什么,Core Data都拒绝发布存储为外部引用的大块数据。我已在Allocations工具中对此进行了验证。应用程序重新启动后,内存占用率将保持极低,因为这些外部引用仅在用户访问时才会被忽略。我需要能够在初始下载和导入后从内存中删除这些BLOBS,因为它们占用了太多的空间。平均而言,它们只是html,所以大多数都是less than 1MB

我已尝试refreshObject:mergeChanges:,几乎所有内容都将标志设置为NO。我甚至尝试过重置我的主NSManagedObjectContext。我有很多autorelease pools,没有内存泄漏,并且没有启用僵尸。如何在最初创建外部引用时减少核心数据内存占用量?

我查看了Apple的所有文档,但无法找到有关外部BLOBS生命周期的任何信息。我也在这个网站上搜索了许多类似的问题而没有解决方案:Core Data Import - Not releasing memory

应用程序首次重新启动后,一切正常,但我需要第一次运行才能保持稳定。其他人是否能够使用Core Data成功排除NSData BLOBS错误?

1 个答案:

答案 0 :(得分:0)

我假设“从内存中清除”意味着“导致对象被解除分配”而不是“将地址空间返回给系统”。前者在你的控制之下。后者不是。

如果您可以在分配工具中看到分配,您是否开启了对引用计数事件的跟踪并平衡了保留和释放?应该有一个指示性的额外保留(或更多)。

如果您可以提供一个简单的示例项目,那么就可以更容易地弄清楚发生了什么。