ios - 泄漏工具未发现泄漏,但未释放内存

标签 ios core-data memory-leaks automatic-ref-counting

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

最佳答案

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

关于ios - 泄漏工具未发现泄漏,但未释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728815/

相关文章:

ios - 在模拟器中开发,但 xcode 要求注册设备

ios - 找不到 -lPayPalMPL 的库

ios - 核心数据子查询 : no such column

ios - 自动生成的核心数据访问器返回已删除的对象

ios - TableView 显示项目中的图像

ios - 具有自动布局的 UITableView 滚动时不平滑

iphone - 使用 CoreData 嵌套撤消组

java - 何时生成堆转储

objective-c - 弱(与强)对象引用的生命周期是多少?

qt - OpenGL 纹理映射内存泄漏