iOS使用Xcode Memory Graph Debugger检测内存泄露

原文iOS — Identifying Memory Leaks using the Xcode Memory Graph Debugger

这篇文章主要介绍

  • 什么是Xcode memory graph debugger
  • 怎样使用及一些tips
  • 优缺点

What is it

长话短说, memory graph debugger回答了为什么一个对象存在内存中?

Xcode memory graph debugger可以帮助找到和修复循环引用与内存泄露。当被激活时,会暂停app运行,展现当前堆中的对象,对象的关系,对象间的引用。

How to use it

3个步骤检查循环引用和内存泄露

  • 在Xcode scheme editor中选中stack logging integration,如图
iOS使用Xcode Memory Graph Debugger检测内存泄露_第1张图片
Enable Malloc stack logging for live allocations
  • 执行你想要分析的app,通过点击如下按钮进入memory graph debugging模式:
The memory graph debugging button
  • memory graph debugging会暂停app运行并展示如图:
iOS使用Xcode Memory Graph Debugger检测内存泄露_第2张图片
Xcode memory graph debugging mode

左边展示app堆中的内容

选中一个实例可以在中间展现实例的引用

选中中间的实例可以生成对象的内存信息,内存泄露信息如下:

Leaks displayed in the debug navigator

Tips

  • 为了确定内存泄露,我们可以通过如图方法选择堆内容仅仅展示泄露
Filtering for memory leaks
  • 运行时信息是有用的,可以展示全部泄露数
iOS使用Xcode Memory Graph Debugger检测内存泄露_第3张图片
Lots of (apparent) memory leaks

The good and the bad

  • 优点:可以轻松地找到一些简单的泄露,比如循环引用。例如一个对象在闭包中持有自己,通过闭包捕获列表可以轻易修复内存泄露。
  • 缺点:可能找不到已经泄露的点。比如,创建一个UIButton对象并在上面天津一个UIToolBars items数组,我们只能看到这发生了内存泄露却看不到为什么泄露。

Useful links

  • https://developer.apple.com/videos/play/wwdc2016/410/
  • https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-DontLinkElementID_1
  • https://useyourloaf.com/blog/xcode-visual-memory-debugger/

你可能感兴趣的:(iOS使用Xcode Memory Graph Debugger检测内存泄露)