27
2017
09

instruments 中 Time Profiler的使用说明

注意手机上要有运行过的app:
1、我们要先 command + shift +k ,clean下
2、运行下app,command + r
3、Xcode–> Product–> Profile (command + i 快捷键)调出instrument,选择Time Profiler,我们可以跟踪哪个方法最耗时间,以此来优化

这里写图片描述

然后可以看到如下
这里写图片描述

点击左边红色的圆点,开始录制,我们就能看到方法执行所需要的时间
这里写图片描述

我们可以看到[GBLoopView animateCurrentTickerString];这个方法最耗时间。我们点击有个向右的箭头,看下该方法
这里写图片描述

GBLoopView是干嘛的呢,是在项目首页有个广播的跑马灯,之前的代码是在viewwilldisapper中将该广播暂停,自己猜测,难道是即使暂停了,里面还有些动画还在执行?于是在animateCurrentTickerString中打断点,果然即使已经push到其他页面,该方法在不断的循环调用,之前有个字断是running 用来记录当前状态的,在主页viewwilldisapper中将其暂停running=NO,在animateCurrentTickerString添加个判断,这样即使push到其他页面,该方法也不会一直在调用了。但是我比较好奇的是即使我在主页将该GBLoopView 暂停并且移除掉,该动画还是一值在执行,不知道该原因是什么~~

看下修改完之后的cpu的占用率

这里写图片描述

我的这个最耗时的已经修改好了,当然还有其他可以优化的。

注意:我们看下有下角的☑️选项,对于我们很有帮组

Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
Invert Call Tree:反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
Hide System Libraries:隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。
Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
Top Functions:找到最耗时的函数或方法。

上一篇:Android MagicaSakura多主题框架 下一篇:Instruments 中 Leaks使用