Xcode 8 最新版Instruments的使用教程
Instruments的介绍
Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪 和分析OS X以及iOS代码的测试工具,用它可以极为方便收集关于一个或多个系统进程的性能和行为的数据,并能及时随着时间跟踪而产生的数据,并检查所收集的数据,还可以广泛收集不同类型的数据.也可以追踪程序运行的过程,这样instrument就可以帮助我们了解用户的应用程序和操作系统的行为。
常用模块
Leaks :找到引发内存泄漏的起点
启动Instruments,找到Leaks图标。如图:
leaks.png点击进入Leaks的主面板。如图:
leaks1.png1:录制按钮
2:暂停按钮
3:内存分配
4:内存泄漏
5:详细信息的查看方式
点击红色按钮开始录制。如图:
leaks3.png开始录制后可以发发现leaks一栏有红色的差出现,代表出现了内存泄漏。
点击箭头1所指的地方,选取Call Tree ,接下来箭头2所指的地方会出现四个选项。
Snapshots选项是设置时间间隔的,推荐设置成10.
Call Tree选项点击后会出现四个菜单,推荐勾选Invert Call Tree(方便快速定位调用栈)和Hide Systerm Libraries(过滤掉一些无用的系统信息)。
双击中间显示的调用函数行,可以定位到自己所写得代码。
在运行的过程中可以发现泄漏就暂停,然后拖动时间轴到泄漏的附近,就可以仅查看该泄漏的函数调用栈。
Time Profiler : 分析代码的执行时间,找出导致程序变慢的原因
- 启动Instruments,找到Leaks图标。如图:
- 点击进入和Leaks类似的界面,同样点击底部的Call Tree 选中Invert Call Tree 和 Hide Systerm Libraries,原因同上。界面如图:
- 开始录制,在手机上操作具体想要测试的页面,Instagrams就会显示出所有调用的函数以及该函数运行的时间等等。如图:
- 正常情况下红色框圈住的地方应该是显示具体的函数名称,治理之所以没显示出来是因为DSYM文件没有加载上,有可能和设置有关,可尝试进行如下设置(选DWARF with dSYM File):
-
所有的Instruments模块使用中如果只出现函数地址,不出现函数名的情况 都可以尝试如上方法
-
一切设置正常后,进入Times profiler就是如图的界面:
- 接下来就是查找哪些函数比较耗时根据情况进行优化
- 双击对应的函数或者点击后面的小箭头就会进入自己写的代码处,方便分析代码。
Core Animation :帧率检测
Core Animation的基本使用方法和以上连个几乎一致,如图:
animation.pngFrame Per second一栏就是当前页面的帧率,到达60说明很流畅。检测帧率的过程中正确的姿势是手指不要离开屏幕。
对于帧率检测,推荐一款小工具——KMCGeigerCounter,该工具可以在页面顶部实时显示当前页面滑动时的帧率(用的时候需要修改一处window以前的错误);
Allocations
进入Allocations后主界面如图:
1440398-d68d941aa032c25b.png1.堆区内存和虚拟内存占用图
2.堆区内存占用图
3.虚拟内存跟踪图
4.选择使用不同的形式展示内存占用情况
5.勾选让上面曲线图展示对应内存占用情况
6.持久分配的内存所占字节数(未释放)即该类对象在内存中占得总内存
7.持久创建的对象个数(未释放)即该对象存在于内存中的个数
8.临时分配的对象个数(未释放)即存在过已经被回收的对象的个数
9.分配的所有内存所占字节数(未释放)
10.创建的对象总数(未释放)
11.设置面板,不同的设置使左边有不同展示效果
Cocoa Layout
网上关于Cocoa Laout的文章介绍比较少,仅仅找到老外老早之前写的一篇文章,可以参考着看下。
https://www.bignerdranch.com/blog/inpecting-auto-layout-with-the-cocoa-layout-instrument/
注意只能在模拟器上测试,不支持真机。
Xcode 8 Memory Graph
Xcode8的调试技能又增加了一个黑科技:Memory Graph。简单的说就是可以在运行时将内存中的对象生成一张图.
运行项目(demo地址),点击如图所指:
接下来会进入内存图:
memory3.png点击左侧紫色的感叹号,就会显示具体的内存引用图:
memory.png可以明显看到有环产生,造成了内存泄漏,根据自己代码情况进行修改。