デバッグ用マクロの活用
デバッグ時のみにログを出力したい等、私の場合はプリプロセッサマクロの設定とifdefで切り分けるという原始的な方法で対応しています。具体的には Prefix.pchで色々な種類のマクロを定義し、DEBUGフラグで出力を制御するようにします。
プロジェクトのBuild Settingsで「Preprocessor Mocros」のDebugの引数に「DEBUG」を設定します。
_Prefix.pchの記述
#ifdef __OBJC__ #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #endif #ifdef DEBUG #define LOG(...) NSLog(__VA_ARGS__) #define LOG_CURRENT_METHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd)) #define LOG_TIMER_START(...) fprintf(stderr,"TIMER start -- %s -- (%d)\n",__STRING(__VA_ARGS__),__LINE__);NSDate *__VA_ARGS__=[NSDate date] #define LOG_TIMER_END(...) fprintf(stderr,"TIMER end -- %s -- (%d): %f s\n",__STRING(__VA_ARGS__),__LINE__,-[__VA_ARGS__ timeIntervalSinceNow]) #define LOG_RETAINCOUNT(var) fprintf(stderr,"-- %s.retainCount=%d --\n",__STRING(var),[var retainCount]) #else #define LOG(...) #define LOG_CURRENT_METHOD #define LOG_TIMER_START(...) #define LOG_TIMER_END(...) #define LOG_RETAINCOUNT(var) #endif
ここで定義したマクロは、Releaseビルドモジュールには含まれなくなります。
各種マクロの説明
- LOG
NSLogの代わりに使用する
- LOG_CURRENT_METHOD
クラス名とメソッド名がログ出力される。各メソッドの最初に記載しておくとメソッドのログトレースが行える。
- LOG_TIMER_START, LOG_TIMER_END
タイマーログのマクロ。ロジックのパフォーマンス計測等に利用する。STARTとENDはセットで使う。
- LOG_RETAINCOUNT
変数のretainCountを調べるマクロ。
アイディア次第で色々と便利な使い道が出来そうです。
ログ程度の利用なら別にもっといい方法があるかもしれません。