その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

アプリのメモリ使用量をリアルタイムに表示するクラスを公開しました

なるべくUIViewを使わず描画するとか、nibを使わないとか、iOSアプリの動作を軽快にするためのTipsは数あれど、実際どれぐらい効果あるんだろう、ってことを調べたい、でもInstrumentsはめんどくさい、ってことでメモリ消費量やUIViewの数など、「負荷を示すパラメータ」をリアルタイム表示するクラスを作りました。
(イメージとしてはAS3でいうところのStats


同梱のサンプルコードを実行すると、こんな感じで表示されます。(左上の黒いラベルがStats)



パラメータ内訳は後述しますが、メモリを約16MB使用し、ビューが合計5つ(UIView、UIButton、UIButton上のUILabel、UIImageView、Stats)になっていることがわかります。
また、draw imageボタンを連打するとCPU負荷の値が若干上がることも確認できます。
※シミュレータでの実行結果です。

パラメータの内訳と単位

上から順に、


・アプリのメモリ使用量の変動量[kB]
・アプリのメモリ使用量合計[kB]
・CPU時間の変動量[msec]
・UIViewサブクラスの総数


となっています。

使い方

githubにサンプル付きで置いてあります。
https://github.com/shu223/Stats

  1. Stats.h, Stats.m をプロジェクトに追加
  2. ヘッダで Stats.h をインポート
  3. UILabelと同じように、好きな場所に貼り付ける(サンプルのようにappDelegateのwindowにaddSubviewしておくと常に一番上に表示されます)
self.stats = [[[Stats alloc] initWithFrame:CGRectMake(10, 30, 100.0, 60.0)] autorelease];
[self.view addSubview:stats];

おまけ機能

下記メソッドをコールすると、

- (void)printHierarchyInApp;

こんな感じでUIViewサブクラスの階層関係がログにはきだされます。

0:UIView {{0, 20}, {320, 460}}
1:UIRoundedRectButton {{106, 403}, {108, 37}}
2:UIButtonLabel {{12, 9}, {84, 19}}
1:UIImageView {{136, 226}, {48, 48}}
0:Stats {{10, 30}, {100, 60}}

左から階層番号、クラス名、frameです。

その他

メモリ使用量取得部分のコードは全面的にこちらの記事を参考にさせていただきました。
自分のアプリが使用しているメモリサイズを取得するには




これでいろいろと効果の高い最適化手法を探っていきたいと思います。