我最近观看了WWDC 2010视频之一:第311节 - 使用乐器进行高级内存分析。链接为here。
有关寻找遗弃记忆的视频中有一个有趣的例子。他们说调试通常比泄漏更重要,但可能更难。
Abandoned Memory被定义为“永远不会再使用的可访问已分配内存”。
泄漏定义为“无法再访问已分配的内存。”
查找Abandoned Memory的主要方法是使用Allocations工具拍摄堆镜头。
但是,在确定我的代码中已经放弃了内存之后,我发现很难确切地知道它来自哪里。
我正在寻找一些寻找遗弃记忆的好方法或资源。
谢谢!
答案 0 :(得分:5)
在Instruments中,您可以获取由快照标识的任何对象的调用堆栈。截图:
所以我们在这里得到的是一个人为的例子,每当用户点击一个按钮时我就会分配一个1MB的NSMutableData。在中下方窗格中,我有4个快照,并且我有一个扩展显示自上次快照以来创建但未发布的对象。我突出显示了一个1.25MB的“非对象”分配,在右侧窗格中,它显示了发生此分配的确切调用堆栈。关于右侧面板的一个技巧是沿底部的滑块 - 它控制堆栈帧的消除。如果要查看所有堆栈帧,请将其一直拖到右侧。灰色框架是那些没有源代码的框架,而非灰色框架是您的代码(或者您有代码和源代码的代码。)(另外,如果您没有看到面板上的右键,检查工具栏中的“查看”按钮。)您还在寻找其他哪些信息?
答案 1 :(得分:1)
当您查看Instruments中的分配时,可以单击右箭头按钮查看该实例的事件历史记录,包括分配,保留,释放和自动释放的所有位置。