2012-01-09 6 views
3

私はあなたの多くは、マクロiOSのdebugBlockマクロ

#ifdef DEBUG 
#define DebugLog(s, ...) NSLog(@"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__]) 
#else 
#define DebugLog(s, ...) 
#endif 

を認識していると確信しているこれはもちろん、あなたがのNSLogの代わりに使用DEBUGLOGという関数を作成します。その後、プロジェクトをデバッグから外すと、NSLogsステートメントのすべての実行が停止します。

私が考えていたのは、これを動作させる方法がブロックであることです。私はこれを行うことができるようにしたい言い換えれば:

DebugBlock(^{ 
    //Code to only be executed while in Debug 
}); 

はい、私はちょうどどこでも#ifdefのDEBUGを行うことができますが、それは私のために十分な空想ではありません:)実現します。

+0

Ay、caramba、私はcurmudgeonと呼んでいますが、「#ifdef」を使用しない理由として、「私にとって十分ではない」 –

+0

ブロックはよりクリーンで読みやすくIMOがあります。 「ファンシー」にしようとするのではなく、人々がそれを答えとして使用しようとしないようにしました。それは実際には質問に答えないので。 – endy

答えて

3

私はそれがいかに簡単かについて愚かな気がしますが、ここでは解決策です。あなたの心が望む場合にも非同期foをディスパッチタイプを変更することができます

DebugBlock(^{ 
    int i = 12; 
    int b = 400; 
    int Answer = i+b; 
    NSLog(@"%d", Answer); 
}); 

#ifdef DEBUG 
#define DebugBlock(...) dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ##__VA_ARGS__) 
#else 
#define DebugBlock(...) 
#endif 

使用量がこのような小さなものになります。