Instruments性能检测

没错就是她
关于Instruments有网友如是说的:“一句话: 内存开销、运行速度、内存泄露 and so on”。

如此简单的回答肯定打发不了咱们各位看官和面试官,当然上述表达和下边的网友总结的意思是一样的:

问:您一般是怎么使用Instruments的?

这个问题也就是考察下你经验如何了, Instruments里面工具很多,也没必要逐一说明,挑几个常用的说下就好:

>Time Profiler:分析代码的执行时间,找出导致程序变慢的原因。

>Zombies:检查是否访问了僵尸对象,但是这个工具只能从上往下检查,不智能

>Allocations:用来检查内存分配,写算法的那批人也用这个来检查

>Leaks:检查内存,看是否有内存泄露

还有对Instruments这么理解的,说的也不错:Instruments的价值在于,它使我们深刻理解我们代码的内部运作。

好了,那么就开始我们自己的Instruments之旅吧,揭开神秘面纱。

注:本文大部分篇幅将讲述Allocations、Leaks、Time Profiler、Zombies这四项,因为是经常用到的,其他的可能简单介绍或者一带而过。

关于Instruments的概述请参考Instruments概述,可以整体的理解一下Instruments。

首先我们要知道怎么打开这个Instruments:在xcode中有好几种打开的方式,具体如下:

1、1240
2/1240
3.长按启动键,旋转Profile
1240
Instruments页面如下,里面全是英文,笔者为大家用有道翻译了一下,哪里不对,希望大家告知,我进行修改。
1240
其实我们可以看到xcode开发人员的用心,一些图片上边的标志我们一看就能明白是什么意思,例如能量诊断,其实就是手机上边的电池嘛?,还有泄漏,就是一个管子,有水滴?滴下来了,就是泄漏的意思。还有网络,就是一个信号塔发射信号的意思。有的看不懂没关系,我这不是给大家翻译了嘛。

另外有的时候Instruments的启动按钮是启动不了的,这怎么办呢,有大神给提供了一种解决方案:Instruments启动按钮不可点。http://www.huangyibiao.com/archives/630(在这里谢谢标哥大神,虽然你也不看我的博客哈哈)

大概的解决方案就是:各种重启。手机关机、重启,同时将Xcode关掉,然后重新打开Xcode,然后重新将手机与电脑连接,再打开Instrument,点击Core Animation,切换到当前的手机,发现可以正常点击了。

在这里有必要说一句,这19个性能检测的工具,有的可以在模拟器上边进行检测,有的是不可以的。如果选择使用ios模拟器,那么它监控的就会是你的mac,和真机还是有区别的,譬如这个电池就应该用真机检测,模拟器的电池没啥可测的。而我们的目的是手机app,当然,所有的项目都是都可以在真机上检测的。建议大家尽量在真机上用Istrunments。下边我们就逐一看看这19个性能检测是怎么操作的,到底怎么就检测了呢,检测出来的都是什么东西呢,会得到什么样的结果呢,我们拭目以待。

1、Blank:

空白的,没啥可说的。

2、Activity Monitor 活动监视器:

监测CPU、内存、硬盘和网络使用情况,还能检测所有的进程,检测父/子进程的层次。默认情况下显示:虚拟内存大小,cup总使用量,cup用户所使用的占用比,cpu系统使用占用比。推荐学习小白学习Activity Monitorhttp://www.jianshu.com/p/445ef0f3cfb3
1240

第1部分是profile的表头,启动、暂停、项目名称、运行时间等等信息都可以在上边找到。

第2部分是左边是性能检测的项目名称,右边以竖形条形式展示运行过程中数据值的大小,比较直观。

第3部分是具体的性能数值,可以选择Details(详细信息)和Console(控制台),可以看到具体的详细信息。

3、Allocations 分配:

(!!重点之一来了!!来得如此之快,还叫人有些不适应呢)

为什么我们要使用这个Allocations,参考Alloactions简单使用。文章中介绍了原因:http://www.jianshu.com/p/680d65d974de
1240

Allocations 的页面如下所示:
1240

1:堆区内存和虚拟内存占用图

2:堆区内存占用图

3:虚拟内存跟踪图

4:选择使用不同的形式展示内存占用情况

5:勾选让上面曲线图展示对应内存占用情况

6:持久分配的内存所占字节数(未释放)即该类对象在内存中占得总内存

7:持久创建的对象个数(未释放)即该对象存在于内存中的个数

8:临时分配的对象个数(未释放)即存在过已经被回收的对象的个数

9:分配的所有内存所占字节数(未释放)

10:创建的对象总数(未释放)

11:设置面板,不同的设置使左边有不同展示效果

如上图并不能很好的了解每个方法所占用的内存情况,接下来我们点击4的call Trees如下图设置:
1240
接下来我们根据内存泄漏的情况对内存分配进行分析,内存泄漏分两种:

第一种:为对象A申请了内存空间,之后再也没用到A,也没有释放A导致内存泄漏。这种是Leaked Memory内存泄漏。

第二种:类似于递归,不断的申请内存导致的内存泄漏。根据下边的链接文章我们知道这种情况就是Abandoned Memory被遗弃的内存。

说到这里大家可以去看看这篇文章iOS Instruments,名字虽然起的很一般,但是讲了Allocations的前因后果。当然,下文我也拿来借鉴了。在此,谢谢文章作者luobs。

第二种情况根据以下图的操作可以清晰的找到对应的问题代码,当然不一定是我们自己代码的原因,也有可能是系统框架的问题。
1240
1240
1240
1240
该方法笔者没有亲测,但是看着挺可靠的,具体的步骤告诉了,按照步骤一步一步的走下来应该就能找到被遗弃的内存(看到这个“被遗弃”的词,就想起了《纪念碑谷》)

4、Automation:自动化

UI 自动测试是iOS 中重要的附加功能,它由名为“Automation”的新的工具对象支持。Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试。

简单的说就是自己写JS脚本进行测试。(最好了解JS语言最好了,不了解的这个Automation其实有点鸡肋)

可以参考下边这篇文章借鉴他人UI Automation。http://www.jianshu.com/p/4dd99c7fdcf0
1240
1240
1240
5、Cocoa Layout:自动布局

Cocoa Layout可以应用于iOS模拟器和Cocoa桌面应用,但是不能和连接的iOS设备一起使用。Cocoa Layout提供了一个与NSLayoutConstraint类的实例有关的所有事件的时间轴,这一点和回溯(backtrace)很像。

关于这项内容网上资料并不多,大家可以参考利用Cocoa Layout 检视自动布局http://www.cocoachina.com/ios/20151105/13927.html
1240

6、Core Animation:核心动画

在网上查资料,大部分都是关于动画怎么设置的,和layer有关的动画制作,即便前面加上Instruments,查出来的也是关于动画制作的。。。也是醉了。幸好我们同事之前总结过关于这方面的,直接拿来用吧。如果大家有相关的链接,希望能给提供一下,谢谢了。

这里我们需要知道这个Core Animation是干什么的,Core Animation工具是用来检测Core Animation性能的。(看起来这句话好像说了等于没说,不过从这句话里面我们可以看出加粗的Core Animation是我们网上查到的利用iOS做的动画,而前面没有加粗的是咱们Istruments里面的Core Animation工具)

首先我们了解什么是FPS。FPS:一秒钟渲染多少帧 Frame Per Second = FPS。

Core Animation给我们提供了周期性的FPS,并且考虑到了发生在程序之外的动画,界面滑动FPS可以进行测试。一般FPS是60左右,过于低的话需要进行优化。根据下图我们会发现,过于低的数值是低于45。
1240

....
文/和珏猫(简书作者)
原文链接:http://www.jianshu.com/p/9e94e42cfb01
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/zhao-jie-li/p/5850793.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值