XCode Instruments简单整理

Xcode开发环境,集成了一个名曰:Instruments工具,在XCode的profile选项中打开对应的工具窗口。

常用的有:

Leaks,内存泄露检测工具。

Allocation,动态分析内存使用情况。

Time Profiler:程序运行耗时检测工具。

Leaks:http://www.jianshu.com/p/0837331875f0

文/笨笨的糯糯(简书作者)
原文链接:http://www.jianshu.com/p/0837331875f0
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

第一步:打开Xcode7自带的Instruments

002003_tcry_223340.png

或者:

002025_iqvk_223340.png

按上面操作,build成功后跳出Instruments工具,选择Leaks选项

选择之后界面如下图:

002048_jmgP_223340.png

到这里之后,我们前期的准备工作做完啦,下面开始正式的测试!

1.选中Xcode先把程序(command + R)运行起来

2.再选中Xcode,按快捷键(command + control + i)运行起来,此时Leaks已经跑起来了

3.由于Leaks是动态监测,所以我们需要手动操作APP,一边操作,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测(也可继续检测,当多个时暂停,一次处理了多个).如图所示:

002049_3tg5_223340.png

4.下面就是定位修改了,此时选中有红色柱子的Leaks,下面有个"田"字方格,点开,选中Call Tree

显示如下图界面

002048_jLnX_223340.png


5.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries,(红圈范围内)显示如下:

002215_SgTt_223340.png

 

到这里就算基本完成啦,这里显示的就是内存泄露代码部分,那么现在还差一步:定位!

6.选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处。

7.找到了内存泄露的地方,那么我们就可以修改即可

-------------------------------------------------------分割线----------------------------------------------------

和使用 Instruments的其他工具一样,点击XCode的Product菜单Profile启动Instruments,选中Allocation选项;

启动后Allocation面板显示了内存中的对象占用曲线,可以显示目前中内存分配了哪些对象,对象的数量,以及由哪些函数进行的创建。

左侧有几个比较有用的选项:

All Objects Created

Created & Still Living

Created & Destroyed

002747_PClR_223340.jpg

Allocation主要用于定位内存使用情况的。

-------------------------------------------------------分割线--------------------------------------------------

使用Time Profiler的性能分析方法


 

Time Profiler分析原理:它按照固定的时间间隔来跟踪每一个线程的堆栈信息,通过统计比较时间间隔之间的堆栈状态,来推算某个方法执行了多久,并获得一个近似值。其实从根本上来说与我们的原始分析方法异曲同工,只不过其将各个方法消耗的时间统计起来。

和使用 Instruments的其他工具一样,点击XCode的Product菜单Profile启动Instruments:

选择Time Profiler工具开始测试,这时会自动启动模拟器和Time Profiler录制。

先进行一些App的操作,让Time Profiler收集足够的数据,尤其是你觉得那些有性能瓶颈的地方。

4、5、6所标记的面板是需要关注的:

4是扩展面板,用来跟踪显示堆栈;5是详细地面板,可以从这里看到cpu运行的时间都消耗在哪里;6是选项面板,可以用来设置Time Profiler的运行参数。

通过对应用的操作,可以在详细面板中看到那些最耗时的操作是哪些,并可以逐行展开查看:

图标为黑色头像的就是Time Profiler给我们的提示,有可能存在性能瓶颈的地方,可以逐渐向下展开,找到产生的根本原因。

比如我们通过分析,发现[CMTool getNewsTimeFromLong]这个时间格式化函数可能需要优化。

当然这里只是举一个例子,性能调优应该首先从整体到细节的顺序进行,才能收到最明显的效果。

Time Profiler参数设置


 

这里边几个选项的含义如下:

Separate by Thread: 每个线程应该分开考虑。只有这样你才能揪出那些大量占用CPU的"重"线程  

Invert Call Tree: 从上倒下跟踪堆栈,这意味着你看到的表中的方法,将已从第0帧开始取样,这通常你是想要的,只有这样你才能看到CPU中话费时间最深的方法.也就是说FuncA{FunB{FunC}} 勾选此项后堆栈以C->B-A 把调用层级最深的C显示在最外面

Hide Missing Symbols: 如果dSYM无法找到你的app或者系统框架的话,那么表中看不到方法名只能看到十六进制的数值,如果勾线此项可以隐藏这些符号,便于简化数据

Hide System Libraries: 勾选此项你会显示你app的代码,这是非常有用的. 因为通常你只关心cpu花在自己代码上的时间不是系统上的

Show Obj-C Only: 只显示oc代码 ,如果你的程序是像OpenGl这样的程序,不要勾选侧向因为他有可能是C++的  

Flatten Recursion: 递归函数, 每个堆栈跟踪一个条目

Top Functions: 一个函数花费的时间直接在该函数中的总和,以及在函数调用该函数所花费的时间的总时间。因此,如果函数A调用B,那么A的时间报告在A花费的时间加上B花费的时间,这非常真有用,因为它可以让你每次下到调用堆栈时挑最大的时间数字,归零在你最耗时的方法。

上面的参数在实践中合理设置,也没有什么太多技巧,就是通过数据的隐藏、显示让我们更关注于想找到的数据。

天下应用,唯快不破!尤其是手机应用,更应该注意用户体验和响应速度。


以上就是XCode自带的关于内存,对象使用情况的三个比较常用的工具大概的使用方法,自己这里也是大致的记录下,网上定有比较全面和细致的教程,因为只是工具,懂的如何使用就好,这里感谢原作者的贡献。

转载于:https://my.oschina.net/u/223340/blog/647005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值