iOS 使用Instruments的工具小结
使用Instruments的工具

iOSXcodeInstrumentsInstruments是一个官方提供的强大的性能调试工具集。

1.Blank(空模板):创建一个空的模板,可以从Library库中添加其他模板;
2.Activity Monitor(活动监视器):监控进程的CPU,内存,磁盘,网络使用情况 是程序在手机运行真正占用的内存大小
3.Allocations(内存分配):跟踪过程的匿名虚拟内存和堆的对象提供类名和可选保留/释放历史;
4.Cocoa Layout 观察NSLayoutConstraint对象的改变,帮助我们判断什么时间什么地点的constraint是否合理
5.Core Animation(图形性能)这个模块显示程序显卡性能以及CPU使用情况
6.CoreData 这个模块跟踪Core Data文件系统活动
7.Counters 收集使用时间或基于事件的抽样方法的性能监控计数器(PMC)事件 ?
8.Energy Log 耗电量监控
9.File Activity 检测文件创建,移动,变化,删除等
10.Leaks(泄漏):一般的措施内存使用情况,检查泄漏的内存,并提供了所有活动的分配和泄漏模块的类对象分配统计信息以及内存地址历史记录;
11.Metal System Trace (Metal API是apple 2014年在ios平台上推出的高效底层的3D图形API,它通过减少驱动层的API调用CPU的消耗提高渲染效率。
12.Network 用链接工具分析你的程序如何使用TCP/IP和UDP/IP链接
13.OpenGL ES Analysis 这个模块测量分析OpenGL ES活动正确性检测以及表现问题,提供解决建议
14.System Trace 系统跟踪,通过显示当前被调度线程提供综合的系统表现,显示从用户到系统的转换代码通过两个系统调用或内存操作
15.System Usage 这个模板记录关于文件读写,sockets,I/O系统活动, 输入输出
16.Time Profiler(时间探查):执行对系统的CPU上运行的进程低负载时间为基础采样。
17.Zombies 测量一般的内存使用,专注于检测过度释放的野指针对象,也提供对象分配统计,以及主动分配的内存地址历史
常用的有
Leaks,Zombies,Core Animation,Time Profiler,Cocoa Layout,Energy Log,Network
一.Core Animation:
通过联调真机,可以观察到运行时每秒绘制了多少帧(60帧封顶,30帧以下可以感觉到卡顿越低越需要优化):
1.选中Color Blended Layers, 可以得到界面的红绿分布,其中红色的为透明部分,红色部分越多对性能影响越大。
注意 xcode 版本不同 Color Blended Layers位置也不同 具体看下面的图片
2.监测离屏渲染:
Color Offscreen-Rendered Yellow
Color Hits Green and Misses Red
看一下淘宝的

Xcode8.3.2 的在下面

注意,XCode 9.3 之后在这里了哦 真机run起来,就可以了,不用打开调试工具

二.性能监控计数器Counters
(CPU Samples 操作是会高,不操作时低切稳定,边玩手机边观察,可以看得到CPU的name )

三,Energy Log
耗电量监控 (可以看到手机的WiFi状态,蓝牙状态等等)

四,Leaks
Leaks一个进程占用的内存空间,包括5种数据区:
(1)BSS段:通常存放未初始化的全局变量
(2)数据段:通常存放已初始化的全局变量
(3)代码段:存放程序执行代码
(4)堆:存放进程运行中被动态分配的内存段,如OC对象等
(5)栈:由编译器自动分配释放,存放函数参数,局部变量等
Analyze-静态分析
检测出的常见的三种泄露
(1).创建了对象没有使用。
(2).创建了对象,且初始化了,但初始化的值一直没有读取过。
Value store to ‘X’during its initialization is never.
(3).Potential leak of an object stored into 'XX'* 。 翻译一下:XX对象的内存单元有潜在的泄露风险。
product ——> Analyze就可以进行静态的内存分析了(或者鼠标左键长安运行按钮的右下角切换到Analyze模式)


Allocations是检测程序运行过程中的内存分配情况的。模板中一个叫(分配)Allocations,以及一个被称为VM Tracker(虚拟机跟踪)。
Allocations可以帮助我们查看全局内存使用情况(Overall Memory Use): 从全局的角度监测应用程序的内存使用情况,捕捉非预期的或大幅度的内存增长。
内存泄漏使用Leaks检测,如果对象发生内存泄漏,detail panel 中会看到对象的retain release历史记录,如果非对象发生内存泄漏,就会看到malloc和free的调用历史。
1.选中Leaks Checks,在Details所在栏中选择CallTree
2.Call Tree会给我们大概的位置,有时候会给我们精确的位置,选中出现内存泄漏的区域,缩小范围,筛选数据。
3.且在右下 Display Settings 中勾选 Invert Call Tree 和 Hide System Libraries 或其他选项可以过滤显示的数据。
4.在导航栏的筛选框中,我们可以输入关键字来筛选数据。
5.双击人头就可以进去对应得函数进行调优

五,Time Profiler
当点击Time Profiler应用程序开始运行后. 就能获取到整个应用程序运行 消耗时间分布 和 百分比.
使用前须知
1.Time Profiler..:
,,MacMacCPUiOSMacGPUiOSCPUGPUGPUCAEAGLLayerOpenGL. .
2. .
在发布环境打包的时候,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码.另iOS引入一种"Watch Dog"[看门狗]机制.
不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程.
开发者可以crashlog看到对应的日志.但Xcode在调试配置下会禁用"Watch Dog".


六、查找野指针 Zombies(没怎么用)
在开启ARC后,可以很大程度上避免产生EXC_BAD_ACCESS错误,但也是有出现可能的,比如非NSObject对象的产生的野指针。
1.使用Zombies工具,启动Zombies后在内部设置了NSZombieEnabled为True。
启用了NSZombieEnabled的话,它会用一个僵尸来替换默认的dealloc实现,也就是在引用计数降到0时,该僵尸实现会将该对象转换成僵尸对象。
僵尸对象的作用是在你向它发送消息时,就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,它会显示一段日志并自动跳入调试器,
因此我们就可以找到具体或者大概是哪个对象被错误的释放了。
基本上通过查看Zombies工具给出的信息找出错误代码行是比较简单的,Zombies也只有在产生EXC_BAD_ACCESS错误时才有用。

参考:
http://www.jianshu.com/p/8dfc477e9d70
http://www.jianshu.com/p/be59588327d5
http://www.jianshu.com/p/2ed69864ea02
http://www.cocoachina.com/ios/20161206/18306.html
iOS 使用Instruments的工具小结的更多相关文章
- iOS使用Instruments的工具
使用Instruments的工具 iOSXcodeInstrumentsInstruments是一个官方提供的强大的性能调试工具集. 1.Blank(空模板):创建一个空的模板,可以从Library库 ...
- 精准 iOS 内存泄露检测工具
MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22 | zepo | 23 Comments 背景 平常我们都会用 Instrument 的 Lea ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- Linux 常用工具小结:(5) lftp工具使用
Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...
- eclipse编辑工具小结
eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...
- 【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类
背景 即使到今天,iOS 应用的内存泄露检测,仍然是一个很重要的主题.我在一年前,项目中随手写过一个简单的工具类,当时的确解决了大问题.视图和控制器相关的内存泄露,几乎都不存在了.后来想着一直就那个工 ...
- iOS 移动端生成工具开发
代码地址如下:http://www.demodashi.com/demo/11284.html 一.准备工作 编译环境 xcode 用于生成冗余架构代码, 实现生成零耦合架构 二.程序实现 上个月的一 ...
- iOS界面设计切图小结
iOS界面设计切图小结 APR 12TH, 2013 1.基本尺寸 (1)界面 实际设计时按: iPhone4.4s:640px*960px iPhone5: 640px*1136px iPad:15 ...
- iOS逆向实战与工具使用(微信添加好友自动确认)
iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...
随机推荐
- Java原子类操作原理剖析
◆CAS的概念◆ 对于并发控制来说,使用锁是一种悲观的策略.它总是假设每次请求都会产生冲突,如果多个线程请求同一个资源,则使用锁宁可牺牲性能也要保证线程安全.而无锁则是比较乐观的看待这个问题,它会假设 ...
- 微信小程序之onLaunch与onload异步问题
所述问题: 前端时间开发了一个微信小程序商城项目,因为这个项目我们的需求是进入小程序就通过wx.login({}) 这个api进行用户登录,获取系统后台的用户基本信息.再此之前,一直以为微信小程序中的 ...
- 跟我一起学opencv 第五课之调整图像亮度和对比度
一.调整图像亮度与对比度 1.图像变换 ---像素变换-点操作 ---邻域操作-区域操作 调整图像亮度和对比度属于像素变换-点操作 公式为:g(i,j) = αf(i,j) + β 其中α>0 ...
- iptables/mysql设置指定主机访问指定端口
本周,运维告知部署的服务被扫描发现漏洞,涉及的软件分别为mysql,ZooKeeper与Elasticsearch. 因为最近任务繁重,人力资源紧张,因此无法抽出更多时间调整代码,添加权限认证. 与软 ...
- 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归
一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...
- word中如何只修改英文的颜色
替换->更多->使用通配符,查找[a-zA-Z],替换为^&,字体选红色
- Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)
前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...
- Java 项目中一种简单的动态修改配置即时生效的方式 WatchService
这种方式仅适合于比较小的项目,例如只有一两台服务器,而且配置文件是可以直接修改的.例如 Spring mvc 以 war 包的形式部署,可以直接修改resources 中的配置文件.如果是 Sprin ...
- 用jQuery实现切换动态图片
1.实现动态图片的切换只需要改变目标图片的路径
- Mybatis-plus快速入门
简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 特性 无侵入:只做增强不做改变,引入它不会对现 ...