Debug Memory Graph检查内存泄漏

讲到检查内存泄漏,很多人的第一反应就是 Instruments 里的 Leaks。今天来讲一下Xcode 8 推出的 Debug Memory Graph

为了能看到内存详细信息,先打开 Edit Scheme-->Diagnostics, 勾选 Malloc ScribbleMalloc Stack。为了避免过多的性能消耗,在 Malloc Stack 中直接选择 Live Allocations Only 即可。

那怎么使用呢?

  • 找到查看视图层级的 Debug View Hierarchy 边上的三个小圈圈的按钮,点击后如下图。
  • 选择 Show the Debug navigator, 如果有内存泄露的地方,边上会有一个紫色的感叹号出现。可以通过下方show only leaked blocks过滤文件。
  • 点击后会有该行的内存详细信息及对象之间的关联关系。其中黑线表示强引用,而灰色的线不代表弱引用,只是一些系统级别的引用或者苹果为了优化显示效果而添加的,可直接忽略。
  • 点击右上角的 Show the Memory Inspector,会有堆栈信息,并且能直接定位到内存泄漏的代码块。

其实上述的功能,在Runtime Issue navigator中是类似的。

WechatIMG78.jpeg

Debug Memory Graph 有好处也有坏处。

  • 好处:它能很方便的定位到内存泄漏的地方。
  • 坏处:有时它会误报。例如 - 当创建UIButton对象并将其添加到UIToolBars项目数组时,我们已经看到它被识别为内存泄漏,但我们不明白为什么。
Debug Memory Graph 有时也会捕捉一下系统的内存泄漏,如下图,内存泄漏定位到了一个叫UIKeyboardPredictionView的地方。原因是调起系统键盘后,系统并没有真正的将键盘回收,下次唤起时还会再次使用,而这个时候它就会将这个识别为内存泄漏。不过这个我们可以不用管。
WechatIMG79.jpeg

你可能感兴趣的:(Debug Memory Graph检查内存泄漏)