instruments工具使用
Activity Monitor
作用:监测CPU、内存、磁盘、网络使用情况
Core Data
Core Data Fetches 工具记录Core Data应用中提取保存数据的操作。
Core Data Cache Misses 工具记录高速缓存未命中导致的故障事件。
Core Data Saves 工具记录了Core Data应用中保存的操作。
Counters
作用:从用户管理的点事件计数器仪器记录信息。它可以记录从一个过程或系统上运行的所有进程的信息
Energy Log
作用:分析手机电量、WIFI、亮度、蓝牙等日志
File Activity
监视器文件和目录,包括文件打开或者关闭,文件权限修改,目录创建,文件移动等
Zombies
检查是否访问了僵尸对象
Allocations
Leaks (内存泄漏检测)
Call Tree菜单选择定位内存泄漏代码(勾选Hide System Libraries和Invert Call Tree)
• Separate by Thread 通过线程分类来查看那些纯种占用CPU最多。
• Invert Call Tree 调用树倒返过来,将习惯性的从根向下一级一级的显示,如选上就会返过来从最底层调用向一级一级的显示。如果想要查看那个方法调用为最深时使用会更方便些。
• Hide Missing Symbols 隐藏丢失的符号,比如应用或者系统的dSYM文件找不到的话,在详情面板上是看不到方法名的,只能看一些读不明的十六进值,所以对我们来说是没有意义的,去掉了会使阅读更清楚些。
• Hide System Libraries 选上它只会展示与应用有关的符号信息,一般情况下我们只关心自己写的代码所需的耗时,而不关心系统库的CPU耗时。
• Flatten Recursion(一般不选)选上它会将调用栈里递归函数作为一个入口。
• Top Functions(可选)选上它会将最耗时的函数降序排列,而这种耗时是累加的,比如A调用了B,那么A的耗时数是会包含B的耗时数。
Time Profiler
主要是用来统计各个方法消耗的时间
Core Animation
1.主要用来评估屏幕渲染时的帧率, 帧率一般来说越接近60就越流畅, 当低于40时, 就会感觉到明显的卡顿.
Xcode-> Debug-> View Debuging->Rendering设置Debug Option选项
• Color Blended Layers,这个选项选项基于渲染程度对屏幕中的混合区域进行绿到红的高亮显示,越红表示性能越差,会对帧率等指标造成较大的影响。红色通常是由于多个半透明图层叠加引起。
•Color Hits Green and Misses Red,当 UIView.layer.shouldRasterize = YES 时,耗时的图片绘制会被缓存,并当做一个简单的扁平图片来呈现。这时候,如果页面的其他区块(比如 UITableViewCell 的复用)使用缓存直接命中,就显示绿色,反之,如果不命中,这时就显示红色。红色越多,性能越差。因为栅格化生成缓存的过程是有开销的,如果缓存能被大量命中和有效使用,则总体上会降低开销,反之则意味着要频繁生成新的缓存,这会让性能问题雪上加霜。
• Color Copied Images,对于 GPU 不支持的色彩格式的图片只能由 CPU 来处理,把这样的图片标为蓝色。蓝色越多,性能越差。因为,我们不希望在滚动视图的时候,由 CPU 来处理图片,这样可能会对主线程造成阻塞。
•Color Non-Standard Surface Formats, 不标准的表面颜色格式.
•Color Immediately,通常 Core Animation Instruments 以每毫秒 10 次的频率更新图层调试颜色。对某些效果来说,这显然太慢了。这个选项就可以用来设置每帧都更新(可能会影响到渲染性能,而且会导致帧率测量不准,所以不要一直都设置它)。
• Color Misaligned Images,这个选项检查了图片是否被缩放,以及像素是否对齐。被放缩的图片会被标记为黄色,像素不对齐则会标注为紫色。黄色、紫色越多,性能越差。
• Color Offscreen-Rendered Yellow,这个选项会把那些离屏渲染的图层显示为黄色。黄色越多,性能越差。这些显示为黄色的图层很可能需要用 shadowPath 或者 shouldRasterize 来优化。
• Color Compositing Fast Path Blue,这个选项会把任何直接使用 OpenGL 绘制的图层显示为蓝色。蓝色越多,性能越好。如果仅仅使用 UIKit 或者 Core Animation 的 API,那么不会有任何效果。如果使用 GLKView 或者 CAEAGLLayer,那如果不显示蓝色块的话就意味着你正在强制 CPU 渲染额外的纹理,而不是绘制到屏幕。
• Flash Updated Regions,这个选项会把重绘的内容显示为黄色。不该出现的黄色越多,性能越差。通常我们希望只是更新的部分被标记完黄色 .
参考资料
https://www.raywenderlich.com/397-instruments-tutorial-with-swift-getting-started
http://hchong.net/2017/04/13/Xcode%E7%A5%9E%E5%99%A8-Instruments%E5%A4%A7%E6%B3%95/