使用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

官方说明https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1

iOS 使用Instruments的工具小结的更多相关文章

  1. iOS使用Instruments的工具

    使用Instruments的工具 iOSXcodeInstrumentsInstruments是一个官方提供的强大的性能调试工具集. 1.Blank(空模板):创建一个空的模板,可以从Library库 ...

  2. 精准 iOS 内存泄露检测工具

    MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22   |   zepo   |   23 Comments 背景 平常我们都会用 Instrument 的 Lea ...

  3. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  4. Linux 常用工具小结:(5) lftp工具使用

    Linux 常用工具小结:(1) lftp工具使用. 这里会按照一些比较常用的功能列出,并举一个具体的例子逐一解释功能. 通常使用ftp过程是登陆ftp,浏览ftp内容,下载ftp文件,或者上传ftp ...

  5. eclipse编辑工具小结

    eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...

  6. 【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

    背景 即使到今天,iOS 应用的内存泄露检测,仍然是一个很重要的主题.我在一年前,项目中随手写过一个简单的工具类,当时的确解决了大问题.视图和控制器相关的内存泄露,几乎都不存在了.后来想着一直就那个工 ...

  7. iOS 移动端生成工具开发

    代码地址如下:http://www.demodashi.com/demo/11284.html 一.准备工作 编译环境 xcode 用于生成冗余架构代码, 实现生成零耦合架构 二.程序实现 上个月的一 ...

  8. iOS界面设计切图小结

    iOS界面设计切图小结 APR 12TH, 2013 1.基本尺寸 (1)界面 实际设计时按: iPhone4.4s:640px*960px iPhone5: 640px*1136px iPad:15 ...

  9. iOS逆向实战与工具使用(微信添加好友自动确认)

    iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...

随机推荐

  1. class基本使用

    console.log(` 1.创建一个空对象 2.让this 指向刚刚创建好的空对象 3.执行构造函数内的代码 (为相关的属性和方法赋值) 4.返回创建好的对象`) // 1.创建一个空对象 // ...

  2. Python开发:部分第三方库无法在线安装解决方法

    前言:Python开发:Python2和Python3的共存和切换使用 一.问题如下: 1.截图: 2.错误信息: Could not find a version that satisfies th ...

  3. C++ 之 简单的五子棋AI程序

    本人是大一新生,寒假无聊,抱着试试看的心态(没有想到可以完成),写了C++的简单五子棋程序,开心.     下面是效果图:     一.首先讲讲大致思路.            五子棋实现的基础:  ...

  4. 从一道面试题探究 Integer 的实现

    记得有次面试,面试官问我: 如何写一个方法交换两个 Integer 类型的值? 当时心里一惊,这是把我当小白了呀!交换两个数的值还不容易么,最简单的直接搞一个中间变量,然后就可以交换了… … 面试官随 ...

  5. Vuex,状态管理模式

    对于 Vue 本人目前接触不深,只得浅层分析,Vue 是单向数据流, state,驱动应用的数据源: view,以声明方式将 state 映射到视图: actions,响应在 view 上的用户输入导 ...

  6. 如何将Azure DevOps中的代码发布到Azure App Service中

    标题:如何将Azure DevOps中的代码发布到Azure App Service中 作者:Lamond Lu 背景 最近做了几个项目一直在用Azure DevOps和Azure App Servi ...

  7. 带你精读你不知道的Javasript(上)(一)

    斌果在这几天看了下你不知道的js这本书,这本书讲的东西还是挺不错的,其中有很多平时我压根没接触到的概念和方法.借此也可以丰富一下我对js的了解. 第一部分 第一章 作用域是什么? 1.程序中一点源代码 ...

  8. springboot~jpa个性化数据操作接口

    jap是个全能仓储 jap把很多数据库访问都封装了,并且提交了默认的一切数据方法签名的约定,大家按着约定走,可以不写SQL语句,而如果比较复杂的情况,也需要写SQL,这里我们介绍一下查询和修改的实例方 ...

  9. org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component

    原因:jdk1.8和你所用框架(spring+springMVC+mybatis)中spring框架的版本有问题, 解决方法:更换jdk1.7或者1.6

  10. Java设计模式---桥接Bridge模式

    参考于 : 大话设计模式 马士兵设计模式视频 写在开头: 桥接模式主要用于一件事物分成了两个维度,进行排列组合,比如礼物,可以分成优雅的礼物(抽象),花(具体),排列组合优雅的花! 1.为什么使用桥接 ...