我最近观看了WWDC 2010的一个视频: Session 311 -使用Instruments进行高级内存分析。链接是here。
视频中有一个关于寻找被遗弃的记忆的有趣例子。他们说,调试通常比泄漏更重要,但也可能更困难。
放弃的内存被定义为“永远不再使用的可访问的已分配内存”。
泄漏被定义为“无法再访问的已分配内存”。
查找已放弃内存的主要方法是使用分配工具进行堆快照。
然而,在确定我在代码中放弃了内存之后,我发现很难准确地找出它来自哪里。
我正在寻找一些好的技巧或资源来寻找被遗弃的内存。
谢谢!
发布于 2011-11-22 10:16:40
在Instruments中,您可以获取由heapshot标识的任何对象的调用堆栈。截图:

所以我们在这里得到的是一个人为的例子,每次用户点击一个按钮时,我都会分配一个1MB的NSMutableData。在中心-底部窗格中,我有4个堆快照,并且我有一个展开的堆快照,以显示自上一个堆快照以来创建但未释放的对象。我突出显示了一个1.25MB的“非对象”分配,在右窗格中,它显示了发生此分配的确切调用堆栈。关于右侧面板的一个技巧是底部的滑块--它控制堆栈帧的消除。如果要查看所有堆栈帧,请将其一直拖到右侧。灰色的框架是那些你没有源代码的框架,而非灰色的框架是你的代码(或者你既有符号又有源代码的代码)。(另外,如果您没有看到右侧的面板,请检查工具栏中的“查看”按钮。)你还在寻找什么其他信息?
发布于 2012-12-15 05:32:15
总结bbum's excellent blog post
当应用程序不运行时,单击Allocations track标题旁边的小I并检查allocated.
查看Instruments中的分配时,可以单击向右箭头按钮查看该实例的事件历史记录,包括分配、保留、释放和自动释放的所有位置。
https://stackoverflow.com/questions/4011683
复制相似问题