Xcode开发环境,集成了一个名曰:Instruments工具,在XCode的profile选项中打开对应的工具窗口。web
经常使用的有:app
Leaks,内存泄露检测工具。框架
Allocation,动态分析内存使用状况。ide
Time Profiler:程序运行耗时检测工具。函数
Leaks:http://www.jianshu.com/p/0837331875f0工具
文/笨笨的糯糯(简书做者)
原文连接:http://www.jianshu.com/p/0837331875f0
著做权归做者全部,转载请联系做者得到受权,并标注“简书做者”。
性能
第一步:打开Xcode7自带的Instruments测试
或者:
优化
按上面操做,build成功后跳出Instruments工具,选择Leaks选项ui
选择以后界面以下图:
到这里以后,咱们前期的准备工做作完啦,下面开始正式的测试!
1.选中Xcode先把程序(command + R)运行起来
2.再选中Xcode,按快捷键(command + control + i)运行起来,此时Leaks已经跑起来了
3.因为Leaks是动态监测,因此咱们须要手动操做APP,一边操做,一边观察Leaks的变化,当出现红色叉时,就监测到了内存泄露,点击右上角的第二个,进行暂停检测(也可继续检测,当多个时暂停,一次处理了多个).如图所示:
4.下面就是定位修改了,此时选中有红色柱子的Leaks,下面有个"田"字方格,点开,选中Call Tree
显示以下图界面
5.下面就是最关键的一步,在这个界面的右下角有若干选框,选中Invert Call Tree 和Hide System Libraries,(红圈范围内)显示以下:
到这里就算基本完成啦,这里显示的就是内存泄露代码部分,那么如今还差一步:定位!
6.选中显示的若干条中的一条,双击,会自动跳到内存泄露代码处。
7.找到了内存泄露的地方,那么咱们就能够修改便可
-------------------------------------------------------分割线----------------------------------------------------
和使用 Instruments的其余工具同样,点击XCode的Product菜单Profile启动Instruments,选中Allocation选项;
启动后Allocation面板显示了内存中的对象占用曲线,能够显示目前中内存分配了哪些对象,对象的数量,以及由哪些函数进行的建立。
左侧有几个比较有用的选项:
All Objects Created
Created & Still Living
Created & Destroyed
Allocation主要用于定位内存使用状况的。
-------------------------------------------------------分割线--------------------------------------------------
使用Time Profiler的性能分析方法
Time Profiler分析原理:它按照固定的时间间隔来跟踪每个线程的堆栈信息,经过统计比较时间间隔之间的堆栈状态,来推算某个方法执行了多久,并得到一个近似值。其实从根本上来讲与咱们的原始分析方法殊途同归,只不过其将各个方法消耗的时间统计起来。
和使用 Instruments的其余工具同样,点击XCode的Product菜单Profile启动Instruments:
选择Time Profiler工具开始测试,这时会自动启动模拟器和Time Profiler录制。
先进行一些App的操做,让Time Profiler收集足够的数据,尤为是你以为那些有性能瓶颈的地方。
四、五、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自带的关于内存,对象使用状况的三个比较经常使用的工具大概的使用方法,本身这里也是大体的记录下,网上定有比较全面和细致的教程,由于只是工具,懂的如何使用就好,这里感谢原做者的贡献。