有开发几年的人也很少都用这些工具的,这里整理下Xcode菜单栏里面Open Developer Tool的一些功能。
一、Instruments工具
Instruments工具是iOS性能优化工具。对于程序员来说,程序代码性能是个老生常谈的话题,随着程序项目的不断增加功能和需求,不得不随时考虑到调试和优化代码,那么根据运用Xcode自带的监控调试工具就可以很好的解决这些问题,防范于未然,Instruments工具提供了很多功能,这里只介绍常用的部分,其他剩下的部分可以私下了解。
1.Core Animation:离屏渲染,图层混合等GPU耗时;
2.Energy Log:耗电检测工具;
3.Leaks:内存检测,内存泄漏检测工具;
4.Network:流量检测工具;
5.Time Profiler:CPU分析工具分析代码的执行时间。
使用Xcode > Open Developer Tool > Instruments 打开方式,还有一种是通过Xcode project打开instruments。这里举例的是打开Time Profiler的步骤。
(一)Core Animation动画渲染的使用:
Core Animation需要注意的一点是必须是在真机调试的情况下使用,用于调试离屏渲染、绘图、动画等操作。调试的时候需要注意以下几个选项的勾选:
"Color Blended Layers":图层混合 ,显示出被混合的图层Blended Layer(是用红色标注),Blended Layer是因为这些Layer是透明的,系统在渲染这些view时需要将该view和下层view混合后才能计算出该像素点的实际颜色,所以红色越少越好。
“Color Hits Green and Misses Red":光栅化,图层缓存。很多视图Layer由于Shadow、Mask、Gradient等原因渲染很高,因此UIKit提供API用于缓存这些Layer:[layer setShouldRasterize:YES],系统会将这些Layer缓存成Bitmap位图供渲染使用,如果失效时便丢弃这些Bitmap重新生成。所以红色越少越好,绿色越多越好。
"Color Copied images":图片颜色格式,标注应用在绘制的时候被Core Animation复制的图片。
"Color Non-Standard Surface Formats":不标准的表面颜色格式。
"Color Immediately":颜色刷新频率,Instruments在执行color-flush操作的时候,取消10毫秒的延时。
"Color Misaligned Images":图片大小,图片缩放MisalignedImage表示要绘制的点无法直接映射到频幕上的像素点,此时系统需要对相邻的像素点做anti-aliasing反锯齿计算,增加了图形负担,通常这种问题出在对某些View的Frame重新计算和设置时产生的。
"Color Offscreen-Rendered Yellow":离屏渲染,Offscreen-Rendering离屏渲染意思是iOS要显示一个视图时,需要先在后台用CPU计算出视图的Bitmap,再交给GPU做Onscreen-Rendering显示在屏幕上,因为显示一个视图需要两次计算,所以这种Offscreen-Rendering会导致app的图形性能下降。所以黄色越少越好。
"Color Compositing Fast-Path Blue":快速路径,标记由硬件绘制的路径。
"Flash Updated Regions":重绘的区域,重绘就是指使用Core Graphics绘制,绘制会损耗一定的性能,因此重绘区域应该越小越好。
(二)Energy Log耗电量检测的使用:
Energy Log耗电量检测,必须要真机调试才能使用。手机运行程序之后,双击打开Energy Log,然后直接点击左上角红色圆点按钮开启检测,然后在左侧菜单栏里面可以看到CPU活动的比例、网络活动的比例、亮度状态、手机睡眠状态、蓝牙连接状态、手机WiFi连接状态、GPS状态等这些能够消耗手机电量的组成部分,可以根据对应模块的数据来检测耗电量的情况,如图所示:
(三)Leaks内存调试的使用:
Leaks的一个进程占用的内存空间,包括5种数据区:
(1)BSS段:一般存放未初始化的全局变量;
(2)数据段:一般存放已初始化的全局变量;
(3)代码段:存放的是程序执行代码;
(4)堆:存放进程运行中被动态分配的内存段,如OC对象;
(5)栈:由编译器自动分配释放,存放函数参数,局部变量;
Leaks是iOS程序中用来检测内存泄漏的工具,根据Leaks可以帮助我们查找项目中的内存泄漏,防止程序内存耗费过大而被挂起。首先双击打开Leaks,点击左上角红色圆点按钮开始运行,并且在Details中选中CallTree选项,具体效果如下图所示:
接着程序运行,我们可以根据上边的进度条来查看内存变化的区域,Leaks工具会按照时间把所耗内存的大小,都以填曲线充图的形式展现,移动鼠标到曲线填充图的位置时,会直接显示出那一时刻所占用的内存大小。如果内存曲线填充图下方显示出红色叉号,则代表该处存在内存泄漏,可通过鼠标在填充图中圈画出该区域,这时下面的Call Tree就会打印出对应的函数堆栈调用以及所占内存大小的详细信息,双击就可进入到对应的代码区域来查看,如下图所示:
鼠标双击函数名称,可以进入到代码对应的具体位置,查看具体情况:
爆红的区域就是测试出来的异常情况的位置。
(四)Network网络检测的使用:
Network网络流量检测工具,双击打开Network,直接单击左上角击红色圆点按钮运行程序,在上面可以看到手机网络的输入输出大小的多少,用鼠标拦截住一块区域就可以查看这个区间是App发生的网络消耗还是其他进程发生的,还可查看网络请求的本地地址和服务地址、输入和输出的大小等信息,具体情况如下图所示:
上图红框中画出的一片消耗网络资源的地方,然后在Details中选择三个选项中的不同选项,第一个:Processes,表示查看网络进程,也就是APP和其他程序使用的流量的总大小;第二个:Connections,表示所有的访问网络请求的端口、输入输出的大小、本地地址、数据包的大小、往返的时间等信息;第三个:Interfaces,在使用者的角度查看当前手机的整体网络的使用情况,这里不区分线程,只区分网络使用类型WiFi或者流量。