1

例如,我将 NSXMLParser 与输入流一起使用。当解析器加载 xml 节点时,应用程序会根据该节点创建 NSManagedObject。如果创建的托管对象的计数器(简单的 NSInteger 属性)大于 50,应用程序保存托管对象上下文,然后将所有收集的对象放入数组中并执行refreshObject: obj mergeChanges:NO (there objects 转向故障) 完全加载到 db app 后对故障执行相同的操作,然后重置存储在属性中的上下文并将其无效并刷新对托管对象的所有引用。结果:保存了 50000 个对象,但内存被部分释放,而不是全部释放(剩余约 20 兆字节)。在@autorelease 的大部分后台线程中导入coredata。泄漏工具未显示泄漏。我无法弄清楚为什么在操作后内存没有释放

4

2 回答 2

1

泄漏不是内存增长的唯一原因,还有被遗弃的内存。这意味着您仍在使用指针引用和对象,但您不再使用。在这里找到它们是一种帮助
您还应该检查另一件事:自动释放的对象。这些对象被引用到池中。池保留它们直到被排干。
由于您正在进行解析,很可能您正在创建大量自动释放的对象,这些对象将在未来的某个时间(可能在下一个运行循环期间)释放,但您可以通过创建您的自己的游泳池。例如,您可以在解析开始之前启动您的池,并在解析结束后立即关闭它。这里有关如何使用它们的更多信息。

于 2013-11-01T15:00:48.293 回答
0

可能有很多原因,其中许多可能与您的代码有关。还有其他几种可能性。您可以启用僵尸,这将阻止内存被释放。此外,CoreData 也会根据需要保留对象。

于 2013-11-01T14:41:19.617 回答