iphone - 查找和调试废弃内存和堆增长的技巧

标签 iphone objective-c memory memory-management memory-leaks

我最近观看了 WWDC 2010 视频之一:Session 311 - Advanced Memory Analysis with Instruments。链接是here .

视频中有一个关于寻找被遗弃的内存的有趣例子。他们说调试通常比泄漏更重要,但也可能更困难。

Abandoned Memory 被定义为“不再使用的可访问分配的内存”。

泄漏被定义为“无法再访问的分配内存”。

查找 Abandoned Memory 的主要方法是使用 Allocations 工具进行堆镜头。

但是,在确定我在代码中放弃了内存之后,我发现真的很难找出它的确切来源。

我正在寻找一些很好的提示或资源来寻找被遗弃的内存。

谢谢!

最佳答案

在 Instruments 中,您可以获得由 heapshot 标识的任何对象的调用堆栈。截图:

Using Instruments to track abandoned memory

所以我们在这里得到的是一个人为的案例,每次用户点击一个按钮时我都会分配一个 1MB NSMutableData。在中心底部 Pane 中,我有 4 个堆,我有一个扩展以显示自上次堆以来已创建但未释放的对象。我突出显示了一个 1.25MB 的“非对象”分配,在右 Pane 中,它向我显示了发生此分配的确切调用堆栈。右侧面板的一个技巧是底部的 slider ——它控制堆栈帧的消除。如果要查看所有堆栈帧,请将其一直拖到右侧。灰色框架是您没有源代码的框架,非灰色框架是您的代码(或您同时拥有符号和源代码的代码。)(另外,如果您没有看到面板上的对,检查工具栏中的“查看”按钮。)您还在寻找什么其他信息?

关于iphone - 查找和调试废弃内存和堆增长的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011683/

相关文章:

iphone - 当我运行 iPhone 模拟器时,PickView 不可见

iphone - 从弹出 View 导航到另一个 View Controller

ios - TableView 重新加载部分崩溃

ios - 多重纹理的最有效方法-iOS,OpenGL ES2,优化

memory - 为什么可以存储的最小值是字节(8位)而不是位(1位)?

exception - ARM9 SVC_STACK 超出范围?

iphone - 你最喜欢的 UITableView/UITableViewCell 技巧是什么?

iphone - 继承 QLPreviewController,在单击 "Home"后重置 navigationItem 上更改的按钮

ios - objective-c :根据字典错误制作json对象。字典值只能是字符串

c++ - std::uninitialized_fill() 和 std::get_temporary_buffer()