Instrunments:
沒錯,就是這貨,很多人平時開發可能不一定會用到這個,但我要說的是,學會使用它,會讓你加分不少哦
先來一張一覽圖:

1、打開方式
或者
兩種方式都行。
2、今天主要介紹一下我常用的3種:Core Animation 、Leaks、Time Profiler

打開方式:
雙擊圖標,會進入到各自界面,然后我們就可以進行下面的工作。
此外,下面的測試都建議使用真機測試,模擬器會非常不准。其實,上面的工具,很多都適合用真機測試,除了Zombies等少數幾個適合用模擬器測試。
第一個:Core Animation(核心動畫)
Core Animation工具是用來檢測Core Animation性能的,不過我可能比較low,我主要用來看fps(一秒鍾渲染多少幀 Frame Per Second = FPS),也就是滑動時查看界面是否卡頓。
一般FPS是60左右,過於低的話需要進行優化,當低於45時,用戶一般是可以覺察到卡頓的,當低於20時,卡頓是特別明顯,甚至影響使用了(之前測試過個位數fps,那感覺想讓我摔手機)。
舉例如圖:
當停止不動時,fps為0.開始滑動時,fps會不斷變化。

PS:這里測試界面卡頓,還有另一種更便捷的方法,借助第三方封裝的一個label,可以在界面實時看到fps,而不需要借助Instruments。
下載地址:Github地址
第二個:Leaks(內存泄露)
這個也比較常用,用來查看app運行期間,那些代碼產生內存泄露。
內存泄露 memory leak,是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。



PS:如果找不到,可能移到底部區域了,如下圖:(xcode新版本會這樣布局)

其中,綠色勾表示運行正常,沒有內存泄露,如果有泄露,會自動顯示❌,下面我找一張有泄露的圖

按照我上面的方式設置完,點擊❌,會定位到代碼處,我們就能看到具體大概到代碼位置了,然后對應去修改。
PS:這里我講一點可能很多人沒注意到一個點,就是關於AFNetworking3.0下存在的內存泄露。
如果你在每次使用時,都是重新
AFHttpSessionManager *sessionManager = [AFHttpSessionManager manager];
可能就會有這種問題,不管你是直接使用,還是封裝后使用,只要用的時候是每次都申請一下sessionManager,就會有這種問題。
解決辦法就是:對sessionManager進行單例處理,就可以避免。
參考文章戳這里:
第三個:Time Profiler(時間分析器)
用來檢測app中每個方法所用的時間,並且可以排序,並查找出哪些函數占用了大量時間。
頁面如下:

我測試等demo內容比較少,所以數據不多,測試的時候,勾選右邊紅框
Separate by Thread:每個線程被單獨考慮。這能讓你知道哪一個線程占用CPU最多。
Invert Call Tree:選中該選項后,調用棧會自上至下顯示。這通常是你需要的,因為你想知道CPU花費時間的那個最深的方法。
Hide System Libraries:選中該選項后,只有你自己app中出現的符號會被顯示出來。
然后就可以分析代碼各階段或者具體代碼分別執行多長時間了。
其實其他的工具都有各自的使用場景,這里我只是簡單介紹了幾種比較常用的,大家有興趣可以深入了解一下Instruments的使用場景。。。。
Enjoy~~~
