iOS性能优化:Instruments使用实战

参考了chenkai 的

本文总结了包括Time Profiler、leaks、Allocation本人认为前两者使用较多,最后的可仅供参考

Time Profiler的使用

作用:

应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.

使用Time Profiler的注意事项:

必须使用真机,因为macbook上的cpu优于iPhone;gpu劣于ipone;

time  profiler使用步骤

在xcode选择 product--profile得到图一界面,钟表为

time profiler

iOS性能优化:Instruments使用实战_第1张图片
图一

点击开始录制按钮得到如图二:


iOS性能优化:Instruments使用实战_第2张图片
图二

可以看出图中包含有调用系统API所消耗的时间,这些数据对我们来说是无用的,因此我们选择屏蔽它

选用call tree的Separate Thread和Hide System Libraries得如图三


iOS性能优化:Instruments使用实战_第3张图片
图三

可以看出剔除了反向调用树和系统API调用的数据。此时点击图中所示方法,可直接跳转至指定代码,对耗时的代码进行优化,一般耗时场景主要为UIImageView播放动画、NSDateFormatter以及NSCalendar的使用等场景。

相关名词注释:

Separate By Thread:线程分离,只有这样才能在调用路径中能够清晰看到占用CPU最大的线程.

Invert Call Tree:从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时,比如FuncA{FunB{FunC}},勾选后堆栈以C->B->A把调用层级最深的C显示最外面.

Hide Missing Symbols:如果dSYM无法找到你的APP或者调用系统框架的话,那么表中将看到调用方法名只能看到16进制的数值,勾选这个选项则可以隐藏这些符号,便于简化分析数据.

Hide System Libraries:这个就更有用了,勾选后耗时调用路径只会显示app耗时的代码,性能分析普遍我们都比较关系自己代码的耗时而不是系统的.基本是必选项.注意有些代码耗时也会纳入系统层级,可以进行勾选前后前后对执行路径进行比对会非常有用.

至此,timer Profiler的使用总结结束。

leaks 的使用

打开步骤同profiler相同,不再赘述。

打开后第一部将弹出的界面的statistics改为call trees,如图四


iOS性能优化:Instruments使用实战_第4张图片
图四

不同于time profiler 此时选Invert Call TreeHide System Libraries

然后点开录制按钮

出现红色错号就说明出现了内存泄露,选则左上角的暂停代码,并用鼠标点击错号得如图五,


iOS性能优化:Instruments使用实战_第5张图片
图五

点击任意一行得到如图六


iOS性能优化:Instruments使用实战_第6张图片
图六

标红处为内存泄露的具体代码,可对其修改解决

Allocation

参考自IOS性能调优系列:使用Allocation动态分析内存使用情况-爱编程 

Allocation工具可以用来帮你了解内存的分配情况

打开方式同上,略过,直接上实料

打开后我们可以看到右侧(图七)几个比较有用的选项

All Objects Created

Created & Still Living

Created & Destroyed

iOS性能优化:Instruments使用实战_第7张图片
图七

通过以上方法可以对应用的整体内存使用情况有所了解,但内存不合理使用导致的内存警告往往是部分代码或视图导致的,我们往往要关注于某段时间或操作过程中内存的分配和使用情况,Allocation提供了这种功能。

比如在进入一个视图前或操作前,我们在Allocation面板左侧点击Mark Generation,这时候会产生Generation A节点,显示内存当前的情况:

iOS性能优化:Instruments使用实战_第8张图片
图8
我们可以在进入视图后再点一次Mark Generation,在视图退出后再点一次Mark,这样三次产生的

Generation分别记录了进入前、进入后、关闭后,再最后一个Generation应该内存被合理释放,否则就代表了在这个视图或操作中有泄漏或不合理的地方。

以上只是Allocation的基本运用,设计出一套使用Allocation来合理测试的方案是比较复杂的,后续慢慢介绍。


你可能感兴趣的:(iOS性能优化:Instruments使用实战)