[iOS]用TimeProfiler揪出那些耗时函数

01.前言

  • 得益于苹果软硬件完美的配合,做为iOS开发者,大多数状况下都不用为性能问题操心,iOS开发者只要专心于本身的业务,其余的苹果都帮咱们作好了。
  • 可是也有不少意外,好比咱们公司的业务中有一个场景,须要在一个界面同时运行5个UICollectionView,而且最多同时要实现4个UICollectionView的同步滚动。这种状况下,能够想见状况仍是挺复杂的。尽管我已经实现了全部资源的循环利用了,可是仍是有稍微的不流畅。做为一个有二十多年强迫症病史的程序员,显然是不能容忍一丝丝的不流畅的。
  • 如今我就把我怎么揪出那些致使卡顿的元凶,而且把他们一个个杀死的利器TimeProfiler介绍给你们,就是下面这个家伙。若是你不知道怎么打开他,请点击Xcode的菜单栏 --> Open Developer Tool --> Instruments 就能找到这款利器了。

02.TimeProfiler基本使用

  • 0一、在左上角选择要调试的应用(请在真机上运行应用,由于模拟器使用的是电脑的CPU,因此不少时候并无明显检测出性能问题。)
  • 0二、在设置里勾选Separate by Thread(按照线程分割监听结果,方便区分) 和 Hide system Libraries(隐藏系统的函数,避免干扰咱们本身的函数。)
  • 0三、开始监听。
  • 0四、查看监听结果。

WTF?怎么看到的是一堆十六进制内存地址?要这一堆有卵用?别着急,往下看。php

03.项目配置

上面说到,折腾了半天仍是没能看到咱们本身的函数。原来,咱们的应用在编译的时候,苹果会给咱们生成一份叫作 “项目名.app.dSYM” 的文件,这份文件里保存了咱们代码的行数以及咱们写的函数的十六进制地址。也就是说,若是咱们能拿到这份文件和函数的十六进制地址,咱们就能去咱们的代码里找到那个函数。git

为了TimeProfiler能去咱们的项目里找到对应的函数,因此咱们应该为TimeProfiler配置获取这份文件的环境,也就是做以下配置:程序员

  • 0一、配置项目的Scheme。github

  • 0二、配置Project。app

04.查看函数耗时

通过上面的配置,咱们再从新运行项目,而后按照上面的方式配置TimeProfiler,你就能看到下面的结果:ide

能够看到,我为了演示阻塞主线程写了一个叫作blockMainThread的方法函数

-(void)blockMainThread{
      for (int i = 0; i < 1000; i++) {
          NSLog(@"%d", i);
      }
  }

在tableView中滑动cell时,每循环一个cell就会调用这个blockMainThread方法,这样会致使主线程被阻塞,以致于界面出现卡顿。而这一切都反应到了TimeProfiler的监听结果里,经过层级关系,咱们能看到blockMainThread方法占用了90.4%的时间,并且咱们还能够右键这个方法,就会出现Reveal in Xcode,点击就能直接跳转到Xcode中对应的方法里了,很是方便。性能

最后,这里有一个关于性能问题很奏效的文章,感兴趣能够研究一下。spa

个人文章集合

下面这个连接是我全部文章的一个集合目录。这些文章凡是涉及实现的,每篇文章中都有GIT地址,GIT上都有源码。若是某篇文章恰好在你的实际开发中帮到你,又或者提供一种不一样的实现思路,让你以为有用,那就看看这句话 “坚持天天点赞的人,99%都是帅哥美女,不再用单身了😀”线程

个人文章集合索引

你还能够关注我本身维护的简书专题iOS开发心得。这个专题的文章都是实打实的干货。

若是你有问题,除了在文章最后留言,还能够在微博@盼盼_HKbuy上给我留言,以及访问个人Github

做者:NewPan 连接:http://www.jianshu.com/p/0fd670547235 來源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

相关文章
相关标签/搜索