Instruments 使用(基于 Xcode8)

一、Instruments简介

(1)Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具。 这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。 这样,Instruments 可以帮你更好的理解应用程序和操作系统的行为。

(2)Instruments包括 Blank(空白)、Activity Monitor(活动监视器)、Allocations(内存分配)、Cocoa Layout(页面布局)、Core Animation(核心动画)、Core Data(数据库)、counters(计数器)、Energy Log(电量输出日志)、File Activity(文件活动)、Leaks(内存泄漏)、Metal System Trace(金属系统跟踪)、NetWork(网络监测)、System Trace(系统跟踪)、Time Profiler(时间分析)、Zombies(僵尸对象)等16个功能。

(3)官方使用指南地址:

      https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide

二、Instruments启动方式

 (1)Xcode -> Open Developer Tool -> Instruments

(2)Product -> Profile

(3)长按启动按钮 -> Profile


三、Instruments使用

(1)Activity Monitor 活动监视器

(2)Allocations(内存分配)

        苹果开发文档内存分类:

        1.Leaked memory: Memory unreferenced by your application that cannot be used again or freed (also detectable by using the            Leaks instrument).

         2.Abandoned memory: Memory still referenced by your application that has no useful purpose.

         3.Cached memory: Memory still referenced by your application that might be used again for better performance.

        其中Leaked memory 和Abandoned memory 都属于应该释放而没释放的内存,都是内存泄露。

(3)Cocoa Layout  页面布局

        观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理。

(4)Core Animation 核心动画

         检测Core Animation 性能工具,主要针对GPU和CPU的使用进行优化。通常会把屏幕渲染工作交给GPU来处理;CPU主要负        责运算等方面的处理。(Core Animation does not support the iOS Simulator platform)

     根据WWDC的说法,当在滑动视图时,FPS低于45的时候,用户会感觉到滑动有卡顿。

       1. Color Blended Layers (图层混合)

            界面都是会出现多个UI控件叠加的情况,如果有透明或者半透明的控件,那么GPU会去计算这些这些layer最终的显示的颜色。基于渲染程度对屏幕中混合区域进行绿到红的高亮显示,越红表示性能越差,会对帧率等指标造成较大影响。

            优化方法:设置opaque 属性为true;调整布局,尽量不要叠加;给View设置一个不透明的颜色,没有特殊需要设置白色即可。

        2. Color Hits Green and Misses Red(光栅化)

            当UIView.layer.shouldRasterize = YES 时,在触发离屏绘制的同时,会将光栅化后的内容缓存起来,如果对应的layer及其sublayers没有发生改变,在下一帧的时候可以直接复用。这将在很大程度上提升渲染性能。

        3. Color Copied Images(图片颜色格式)

     苹果的GPU只解析32bit的颜色格式,对于GPU不支持的色彩格式的图片只能由CPU来处理,这样的图片为蓝色,蓝色越多性能越差。因为如果在滚动加载大量图片时,由CPU来处理图片,可能会阻塞主线程。

        4. Color Non-Standard Surface Formats (标记不标准的表面颜色格式)

        5. Color Immediately(颜色刷新频率)

           当执行颜色刷新的时候移除10ms的延迟,因为可能在特定情况下你不需要这些延迟,所以使用此选项加快颜色刷新的频率。不过一般这个调试选项我们是用不到的。

        6. Color Misaligned Images(图片大小)

          这个选项可以帮助我们查看图片大小是否正确显示。如果image size和imageView size不匹配,image会出现黄色。要尽可能的减少黄色的出现,因为image size与imageView size不匹配,会消耗资源压缩图片。

         7. Color Offscreen-Rendered Yellow(离屏渲染)

            离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。还有另外一种屏幕渲染方式-当前屏幕渲染On-Screen Rendering ,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。 离屏渲染会先在屏幕外创建新缓冲区,离屏渲染结束后,再从离屏切到当前屏幕, 把离屏的渲染结果显示到当前屏幕上,这个上下文切换的过程是非常消耗性能的,实际开发中尽可能避免离屏渲染。

          触发离屏渲染Offscreen rendering的行为:

       (a)drawRect:方法

       (b)layer.shadow

       (c)layer.allowsGroupOpacity or layer.allowsEdgeAntialiasing

       (d)layer.shouldRasterize

       (e)layer.mask

       (f)layer.masksToBounds && layer.cornerRadius

           这里有需要注意的是第三条layer.shouldRasterize ,其实就是我们本文讲的第二个选项光栅化,光栅化会触发离屏渲染,因此光栅化慎用。第六条设置圆角会触发离屏渲染,如果在某个页面大量使用了圆角,会非常消耗性能造成FPS急剧下降,设置圆角触发离屏渲染要同时满足下面两个条件:layer.masksToBounds = YES;layer.cornerRadius = 5;

        为了尽可能避免触发离屏渲染,我们可以使用贝塞尔曲线设置圆角。

       8. Color Compositing Fast-Path Blue (快速路径)

           标记由硬件绘制的路径为蓝色,蓝色越多越好,可以对直接使用OpenGL绘制的图层进行高亮。

       9. Flash Updated Regions (重绘区域)

           这个选项会对重绘的内容高亮成黄色,重绘就是指使用Core Graphics绘制,绘制会损耗一定的性能,因此重绘区域应该越小越好。

(5)Core Data(数据库)

        主要是用于监测读取、缓存未命中、保存等操作,能直观显示是否保存次数远超实际需要。

(6)counters(计数器)

        从用户管理的点事件计数器仪器记录信息。它可以记录从一个过程或系统上运行的所有进程的信息。需要真机测试

(7)Energy Diagnostic  能量诊断

         用于Xcode下的Instruments来分析手机电量消耗的。(需要真机测试)

(8)File Activity  文件活动

         这个模板活动监视器文件和目录,包括文件打开或者关闭,文件权限修改,目录创建,文件移动等。不支持iOS 平台。

(9)Leaks 内存泄漏

        查看内存使用情况,检查泄漏内存,并提供按类别分配对象内存地址以及内存地址历史分配记录和泄漏块的统计信息。

   1. Separate by Category 类别分离

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

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

   4. Hide System Libraries 隐藏系统调用库

   5. Flatten Recursion  处理递归(自己调用自己),在每个栈中只跟踪一个,而不是多个。

(10)Metal System Trace(金属系统跟踪)

金属系统跟踪通过从应用程序,驱动程序和gpu层提供跟踪信息来描述ios和macos金属应用程序的性能。

(11)Network 网络监测

分析应用程序如何使用TCP / IP和UDP / IP连接使用连接仪器。

(12)System Trace  系统跟踪

        该模板提供了系统行为的全面信息。它显示线程何时调度,并显示从用户到系统代码的线程转换,通过系统调用和内存操作。这个模板可以在OS X操作系统和iOS上使用。

(13)System Usage  系统使用

         这个模板监视一个应用程序和记录系统的I / O活动相关的文件,套接字和共享内存。这包括输入,输出,时间回溯,调用树,乃至每一次响应。该模板只可用于iOS。

(14)Time Profiler  时间分析器

         用来检测app中每个方法所用的时间,并且可以排序,并查找出哪些函数占用了大量时间。


(15)Zombies  僵尸对象

         用来检测过度释放的“僵尸”对象,还提供了数据对象分配的类以及所有活动分配内存地址的历史记录。

         使用Zombies工具来查找僵尸对象: Zombies工具的查找原理其实和设置NSZombieEnabled环境变量的调试方法是一样的,启动Zombies后在内部设置了NSZombieEnabled为true。

         启用了NSZombieEnabled的话,它会用一个僵尸对象来代替已释放对象。也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,332评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,930评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,204评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,348评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,356评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,447评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,862评论 3 394
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,516评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,710评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,518评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,582评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,295评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,848评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,881评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,121评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,737评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,280评论 2 341

推荐阅读更多精彩内容