iOS -调试工具Instruments使用总结

一、instruments介绍

灵活、强大的工具,可以做性能分析、代码追踪、检查内存泄露等。

二、使用

1、打开方式

Xcode -> Open Developer Tool -> Instruments

 

 

2、常用模块

  • Allocations:用来检查内存分配,跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史
  • Leaks:一般的查看内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录
  • Time Profiler:分析代码的执行时间,执行对系统的CPU上运行的进程低负载时间为基础采样
  • Zombies:检查是否访问了僵尸对象

3、Allocations(分配)

  简单来说就是不断的重复某一个场景,查看内存增量,一般情况下,100K以下都属于正常范围。

4、Leaks(内存泄露)

  1. 运行工程,点击要测试的页面
  2. 观察红叉,点击暂停,点击红叉
  3. 底部切换成Call Tree,查看相关代码
  4. 限制Call Tree展示,打上右边的勾,Hide Sys
  5. 展开底部列表,找到相关代码

5、Time Profiler (时间分析)

  1. 真机调试
  2. 最好使用Release环境配置,接近线上
  3. 主要看Call Tree 和 Sample List 两种视图
  4. Running Time:函数运行的时间,这个时间是累积时间
    Self:在栈顶次数
    Symbol Name:被调用函数的符号信息

  5. 查看时间异常的列表,展开后定位相关代码位置

6、Zombies (僵尸对象)

  1. 概念:过度释放的对象,对同一个对象释放了多次;

    当引用计数降到0时,对象占用的内存已经被释放掉,此时指向原对象的指针就成了“悬垂指针”,如若再对其进行任何方法的调用,(原则上)都会直接crash(然而由于某些特殊的情况,不会马上crash)。过度释放简单的说就是对release的对象再release,就是过度释放。

  2. 相关概念:内存泄漏:对象使用完没有释放,导致内存浪费。野指针:指向僵尸对象(不可用内存)的指针。给野指针发消息会报EXC_BAD_ACCECC错误。空指针:没有指向储存空间的指针(里面存的是nil,也就是0)。在oc中使用空指针调中方法不会报错。
  3. 使用:在Launch Configuration中勾选Record reference counts和Enable NSZombie detection。其中Recordreference counts是显示引用计数,Enable NSZombie detection是能够检测僵尸对象。这样在程序运行的时候,如果发现僵尸对象它就会弹出一个对话框,点击其中“→”按钮,在屏幕的下方会显示僵尸对象的详细信息,下图可以看到僵尸对象的引用计数变化情况。

  

posted on 2020-09-11 16:35  麦芽呀~  阅读(3904)  评论(0编辑  收藏  举报