核心数据拒绝从内存中清除外部数据引用



我正在将大量数据加载到具有后台NSManagedObjectContext的后台线程上的核心数据中。我经常在保存后重置此背景上下文,以便从内存中清除对象图。操作完成后,还会释放上下文。

问题是,无论我做什么,Core Data都拒绝发布存储为外部引用的大块数据。我已经在Allocations仪器中验证了这一点。应用重启后,内存占用量将保持极低,因为这些外部引用仅在用户访问时无故障。我需要能够在初始下载和导入后从内存中删除这些BLOBS,因为它们集体占用了太多空间。平均而言,它们只是html,因此大多数都是less than 1MB

我已经尝试refreshObject:mergeChanges:几乎所有内容都将标志设置为 NO。我什至也尝试重置我的主要NSManagedObjectContext。我有很多autorelease pools,没有内存泄漏,也没有启用僵尸。最初创建外部基准时,如何减少核心数据存储占用空间?

我已经查看了Apple的所有文档,找不到有关外部BLOB生命周期的任何信息。我还在这个网站上搜索了许多类似的问题,但没有解决方案: 核心数据导入 - 不释放内存

应用程序首次重新启动后一切正常,但我也需要第一次运行稳定。还有其他人能够成功地对核心数据进行NSData BLOBS故障吗?

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

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

如果你能提供一个简单的示例项目,就会更容易弄清楚发生了什么。

最新更新