Xcode
iOS
Cocoa

Xcode Time Profilerの使い方

iPhoneのアプリなどの開発でパフォーマンスを改善するためにできることがTime Profilerを使ってどの処理が重いかを調べることです。

私が開発しているアプリでとある画面を開くのがかなり遅かったためそれを調査するのにTime Profilerを使用しました。

Time Profiler

Xcodeのメニューより Product -> Profile を選択します。

Screen Shot 2017-12-31 at 14.39.58.png

次にTime Profilerを選択しChooseをクリックします。
Screen Shot 2017-12-31 at 14.41.29.png

するとこのような画面が表示されますので左上の赤丸ボタンをクリックすると接続端末でアプリが起動します。

Screen Shot 2017-12-31 at 14.42.49.png

そして、重い処理を実行します。このアプリの場合は画面遷移です。
すると、このようなグラフと各スレッドで実行された処理の時間が表示されます。

Screen Shot 2017-12-31 at 14.55.20.png

上のグラフの部分はCPUの使用率です。この場合だと98%が約3秒ほど続いており処理が重いことが分かります。

ちなみに他の処理の処理時間を確認したい場合はその処理を行った際のグラフをクリックすると表示されます。

左の部分の数字は処理にかかった時間です。この場合だと3.89秒かかっておりこの画面を開くのにかなり時間がかかることがわかります。

そして右のExtended Detail Viewにはどのメソッドの処理が重いかを表示してくれています。
SucViewController.viewDidLoad と SucViewController.setUpEmpticonResourcesが表示(黒文字)されています。
さらに中を詳しく見て見るために、SucViewController.viewDidLoadをダブルクリックしてみます。

Screen Shot 2017-12-31 at 15.09.42.png

するとソースコード上でどの処理に時間がかかっているか表示してくれます。この場合だと、viewDidLoad内の[self setEmorticonResources]というメソッドが重いことがわかりました。

そこで、その部分をviewDidLoadではなく、アプリ起動時に1回だけ実行するように変更します。

すると3.89秒かかっていた処理が2.29秒になっています。グラフも前ほど使用されていないことがわかります。

Screen Shot 2017-12-31 at 15.16.33.png

このアプリでは画面遷移がおそかったのがその画面を開くたびに独自の絵文字のリソースを読み込んでいたためでした。

以上、Time Profilerの使い方でした。