Instruments
如何打开instruments? Xcode-Open Developer Tool-
它里面的工具有很多,常用:
1->Time Profiler:性能分析(对iOS设备进行性能测试,主要是查看程序哪些部分最耗时 -Profile->instruments->Time Profiler)
2->Zombies:检查是否访问了僵尸对象,但是这个工具只能从上往下检查不智能
3->Allocations:用来检查内存,写算法的也用这个来检查
4->Leaks:检查内存,看是否有内存泄漏(检查内存泄漏:也可以用- - 静态分析 analyze)
5->Network 用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接
6->Automation(自动化):这个模板执行它模拟用户界面交互为IOS机应用从instrument启动的脚本;可以将一些特定流程写成脚本来执行
Time Profiler
可以查看多个线程里那些方法费时过多的方法。先将右侧Hide System Libraries打上勾,这样能够过滤信息。然后在Call Tree上会默认按照费时的线程进行排序,单个线程中会也会按照对应的费时方法排序,选择方法后能够通过右侧Heaviest Stack Trace里双击查看到具体的费时操作代码,从而能够有针对性的优化,而不需要在一些本来就不会怎么影响性能的地方过度优化。启动Timer Profiler 和app后,操作app可以查看执行时间,如下图
找到最耗时的操作:
勾选Top Functions.
Allocations
这里可以对每个动作的前后进行Generations,对比内存的增加,查看使内存增加的具体的方法和代码所在位置。具体操作是在右侧Generation Analysis里点击Mark Generation,这样会产生一个Generation,切换到其他页面或一段时间产生了另外一个事件时再点Mark Generation来产生一个新的Generation,这样反复,生成多个Generation,查看这几个Generation会看到Growth的大小,如果太大可以点进去查看相应占用较大的线程里右侧Heaviest Stack Trace里查看对应的代码块,然后进行相应的处理。
Leaks
动态检测内存工具。可以在上面区域的Leaks部分看到对应的时间点产生的溢出,选择后在下面区域的Statistics>Allocation Summary能够看到泄漏的对象,同样可以通过Stack Trace查看到具体对应的代码区域。下面为Leaks页面:
如果在3区域有红叉,则表示有内存泄漏:
检测结果的分析leaks--callTree,另外在右边区域:
Separate by Thread ----表示按线程分开做分析这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
Invert Call Tree----表示方向输出调用树;把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
Hide System Libraries----表示隐藏系统库文件,过滤各种系统调用。过滤掉各种系统调用,只显示自己的代码调用。
Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
当发现内存泄漏的时候,为了定位到具体的代码处,可以先暂停,只要点击那个等号即可。
接着将1的选框选为Call Tree;将右侧的2的选择调至中间,如果需要对Call Tree进行限制,将3打上勾;看到4后面如果有箭头就展开,直到出现类似5的后面没有箭头为止,然后双击5,他就会跳到内存泄漏处,修复即可。
Zombies
测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史