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 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...
随机推荐
- Flarum轻量级论坛的安装
论坛作为互联网中的远古产物,经历了如QQ群.社区和贴吧等新兴社交工具的冲击,依然能够存在,肯定是有着不可替代的用处,像吾爱.远景等论坛依旧火热.一些博客主也喜欢自己搭建一个论坛作为用户聚集之地. 之前 ...
- 使用 Moq 测试.NET Core 应用 -- Mock 行为
第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...
- NormalDialogFragmentDemo【普通页面的DialogFragment】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 该Demo主要演示DialogFragment作为普通页面,显示全屏和状态栏下方的效果以及动画效果. 效果图 代码分析 @Overr ...
- 知识小罐头05(tomcat8请求源码分析 上)
这一篇我们不看源码,就大概理一下Tomcat内部组成部分!前面花费了两篇博客的篇幅来说说了一般的maven web项目并部署到tomcat运行,其实都是为这篇做铺垫的! 其实我下载了tomcat7,t ...
- C# net request payload形式发送post请求
因为开发微信群发电脑版需要模拟微信POST请求,微信发送消息使用request payload发送,实际发送的是json字符串.我们只需要生成的json字符串和请求的一致,header头完全模拟即可. ...
- JDK源码分析(2)之 Array 相关
在深入了解 Array 之前,一直以为 Array 比较简单,但是深入了解后才发现其实挺复杂的.所以我把重要的写在最前面,但凡遇到和语言本身相关的问题,都可以查阅 Java Language and ...
- C# 曲线上的点(二) 获取距离最近的点
如何在一条曲线上,获取到距离指定点最近的点位置? 与上一篇 C# 曲线上的点(一) 获取指定横坐标对应的纵坐标值 类似, 我们通过曲线上获取的密集点,通过俩点之间连线,获取连线上最近的点.我们能够获取 ...
- acrobat pdf 按页拆分
百度 https://jingyan.baidu.com/article/37bce2be7098a21002f3a2f2.html 百度acrobat版本比我的高,操作不同了: 我的方案: 组织页面 ...
- 学JAVA第十七天,接口与抽象方法
JAVA接口可以让代码更加有合理的规范性,就想一个项目小组,组长要负责把成员的代码整合,但是每个成员写的方式都是按照他们自己的想法来写的, 所以,整合起来就非常麻烦. 但是,如果我们的组长制作了一个接 ...
- mysql命令行导入导出数据库
导出:1.在命令行里,进入mysql安装根目录下的bin目录下比如:D:\Program Files\MySQL\MySQL Server 5.0\bin输入 mysqldump -uroot -p ...