参考了chenkai 的简书
本文总结了包括Time Profiler、leaks、Allocation本人认为前两者使用较多,最后的可仅供参考
Time Profiler的使用
作用:
应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.
使用Time Profiler的注意事项:
必须使用真机,因为macbook上的cpu优于iPhone;gpu劣于ipone;
time profiler使用步骤
在xcode选择 product--profile得到图一界面,钟表为
time profiler
点击开始录制按钮得到如图二:
可以看出图中包含有调用系统API所消耗的时间,这些数据对我们来说是无用的,因此我们选择屏蔽它
选用call tree的Separate Thread和Hide System Libraries得如图三
可以看出剔除了反向调用树和系统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,如图四
不同于time profiler 此时选Invert Call Tree和Hide System Libraries
然后点开录制按钮
出现红色错号就说明出现了内存泄露,选则左上角的暂停代码,并用鼠标点击错号得如图五,
点击任意一行得到如图六
标红处为内存泄露的具体代码,可对其修改解决
Allocation
参考自IOS性能调优系列:使用Allocation动态分析内存使用情况-爱编程
Allocation工具可以用来帮你了解内存的分配情况
打开方式同上,略过,直接上实料
打开后我们可以看到右侧(图七)几个比较有用的选项
All Objects Created
Created & Still Living
Created & Destroyed
通过以上方法可以对应用的整体内存使用情况有所了解,但内存不合理使用导致的内存警告往往是部分代码或视图导致的,我们往往要关注于某段时间或操作过程中内存的分配和使用情况,Allocation提供了这种功能。
比如在进入一个视图前或操作前,我们在Allocation面板左侧点击Mark Generation,这时候会产生Generation A节点,显示内存当前的情况:
Generation分别记录了进入前、进入后、关闭后,再最后一个Generation应该内存被合理释放,否则就代表了在这个视图或操作中有泄漏或不合理的地方。
以上只是Allocation的基本运用,设计出一套使用Allocation来合理测试的方案是比较复杂的,后续慢慢介绍。