[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 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索