[✔️]xcode Instrucments排查app的内存泄露

305 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情

以Profile运行APP

有2种启动方式:

image.png

启动后需要选择分析模板,这里我们采用Leaks,用来排查内存泄露:

image.png

当然你也可以从Profile in Instrucments进入: image.png

Instrucments界面

启动Instrucments后,需要打开recording,这样app就能启动了,同时instrucments也开始了追踪。

image.png image.png

image.png

主要有2大功能:

  • Allocations: 查看内存分配情况
    • All Heap: 所有的堆栈分配情况
    • Anonymous VM: 虚拟内存分配情况
  • Leaks:内存泄露情况

Allocations

image.png

左上角可以切换子功能

Statisitcs:统计

image.png

  • category:类型
  • Persistent(持久): 内存中的Object使用的内存大小
  • # Persistent: 数量,类似其他语法中的lenth函数
  • Transient(转瞬即逝):释放的内存大小
  • # Transient:数量

Call Trees:调用顺序

image.png 可以通过下边的Call Tree过滤、调整显示顺序等,方便检索查看

Allocations List:分配列表

Generations:用来对比2个时刻的差异

底部菜单

image.png

设置需要记录哪些Allocation

  • Mark Generation:和Generations配合使用
  • All Allocations:所有的
  • Created & Persistent:创建且存活的
  • Created & Destroyed:创建且被销毁的

image.png

  • All Heap Allocations:所有的堆栈情况
  • All VM Regions:所有的虚拟内存区域

Leaks

image.png

红×表示内存泄露,这里会提示发生内存泄露的数量,不是这里发生了内存泄露,感觉Leaks会定时检测,给出的是距离上次检测的结果。

  • 当我们点击Leaks时,底部统计的是当前所有的Leaks
  • 当我们框选区域时,底部统计的是区域内的Leaks

统计信息非常详细,Responsible Frame里面有时会只显示内存地址,解决办法是debug时要选择 dwarf with dSYM File.

image.png