[iOS] デバッグ時に時間計測するシンプルなクラスをつくった

2013/01/11

こんにちは。きんくまです。

アプリのアップデートの申請がおととい終わりました。
最近は審査が始まるまでに受付から5〜7日ぐらいかかっているので、うまくいけば来週か再来週にはリリースされると思います。

それで、作っているときに画面遷移の時間がひっかかる部分がありまして。
どうもボタンを押してから次の画面に移るまでに止まってしまっている状態なんです。
iPhone5だとほとんど気にならないのですが、iPhone4だとちょっと気になるスピード。
どこが詰まっているところなのかなと計測したいなと思いました。

時間計測のライブラリで何か良いのないかな?とググってみたんですが、うまく見つけられなかったので作ったのが今回のクラスです。

GitHubにアップしました
>> KinkumaDesign/KKMeasureTimeLogger · GitHub

簡易なデバッグツールなんで、ボトルネックの検討をつけるみたいな目的に使います。

使い方

1.
KKMeasureTimeLogger.h と KKMeasureTimeLogger.m をプロジェクトに入れる

2.
計測したい実装ファイルに #import したらコードを書く

    /*
     * 始めにこのメソッドを使う
     * モードは2種類
     *  KKMeasureTimeLogModeAtOnce  > lap をすると同時にログを出す
     *  KKMeasureTimeLogModeAfter   > stop したときにまとめてログを出す
     */
    [KKMeasureTimeLogger startWithLogMode:KKMeasureTimeLogModeAfter];

    //途中計測(何度でも使用可)
    [KKMeasureTimeLogger lap:@"好きなメッセージをここに書きます"];

    //終了処理
    [KKMeasureTimeLogger stop];

3.
出力結果例

-- Time result
From start 0.000014 sec. From last lap 0.000004 sec <= button tapped in master view
From start 0.001058 sec. From last lap 0.001044 sec <= detail view did load
From start 0.001190 sec. From last lap 0.000132 sec <= detail view view will appear
From start 0.355751 sec. From last lap 0.354561 sec <= detail view view did appear

startしてからの時間と前にlapしたときからの時間の2つが、好きなメッセージと一緒に表示されます

利点

シングルトンなので、別々のクラスから使ってもアプリを通して計測することが可能です。
GitHubのサンプルコードではリストナビゲーションで親ビューから子ビューに遷移するときにかかる時間を計測しています。(..ていうか、これ自分が作ってたアップデートで詰まってた部分がまさにこれでした)

上の例では親ビューのボタンが押されてから子ビューのviewDidLoadが完了するまでに0.001044秒かかっていることがわかります。

あとNSLogは意外と時間がかかってしまうので、出力をすぐに行うか、まとめて行うかの2つのモードを用意しました。まとめて行えばNSLog自体は最後に1回なので気にしなくて大丈夫です。

厳密にはこのクラスの呼び出し時間もかかってしまっているので、実際よりは時間も遅くなっているのですが、あくまで検討材料を手軽に提供するみたいな感じでございます。

もし良かったら使ってみた下さいませ。

---

おまけ
時間計測でググったときに、こんなページを発見しましたです。
試してないのですが、もう少し細かく計るときに良いのかもしれないです。

>> iOSアプリでのパフォーマンス測定方法 - Awaresoft

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る