でらうま倶楽部 : iPhone リリースビルド時に余計なコードをまとめて省く、Objective-Cなりの書き方。
http://blog.livedoor.jp/tek_nishi/archives/3449727.html
でらうま倶楽部 : Objective-C プロトコルを最短で理解するプログラム例 の記事を参考にさせて頂いたの、御礼がてら。
C言語の定番として、マクロを使うという手がありますね。以前、業務で良く使っていました。
[code lang=”objc”]
#ifdef _DEBUG
#define NSLOG(_x) NSLog _x
#else
#define NSLOG(_x)
#endif
[/code]
と定義しておいて、
[code lang=”objc”]
void Main()
{
// 通常の実行
Calc *calc = [Calc alloc];
int ans = [calc add:10 at:20];
NSLOG(([NSString stringWithFormat:@"ans: %d", ans ]));
// nilの場合の実行
calc = nil;
ans = [calc add:10 at:20];
NSLOG(([NSString stringWithFormat:@"ans: %d", ans ]));
}
[/code]
のようにログを書きます。「NLOG(( … ));」のように、括弧を2重に重ねるのが気持ち悪いですが、こうすると綺麗さっぱり消えます。まあ、ログなので括弧が2重になってもokかなと。
これの派生バージョンで、C++ では、__FILE__, __LINE__ を使って簡易的にログ出力できるようなマクロを組んだりします。
~ 追記
… が、最近の vc++ では、__VA_ARGS__ が使えるんですね。知らんかった。gcc は使えるのですが、昔の vc++ は使えなかったもので。
[code lang=”objc”]
#ifdef _DEBUG
#define NSLOG(…) NSLog(__VA_ARGS__)
#else
#define NSLOG(…)
#endif
[/code]
としておいて、
[code lang=”objc”]
NSLOG(@”debug message");
[/code]
とかで十分。