DebugLog を応用した DebugBlock
DebugLog
良く見かける技で、デバッグビルド時のみ出力されるログを以下の様に定義出来る。
#if DEBUG #define DebugLog(...) NSLog(__VA_ARGS__) #else #define DebugLog(...) #endif
Before
#if DEBUG NSLog(@"debug message"); #endif
After
DebugLog(@"debug message");
DebugBlock
応用して Block を扱ってみる。
#if DEBUG #define DebugBlock(block) block() #else #define DebugBlock(block) #endif
Before
#if DEBUG view.layer.borderColor = [UIColor redColor].CGColor; view.layer.borderWidth = 1; #endif
After
DebugBlock(^{
view.layer.borderColor = [UIColor redColor].CGColor;
view.layer.borderWidth = 1;
});
これでデバッグビルド時のみ実行される実装をブロック内に記述する事が出来る。
上記ではデバッグビルド時のみビューの位置と大きさを確認出来る様に枠線を表示している。
一応上記の方法で retain count を調べてみたところ、デバッグビルド時のみ変数のキャプチャが行われリリースビルド時はキャプチャが行われなかった。
Xcode で記述する際にブロック構文のコード補完が行われないのが惜しいけど、まぁまぁ使えそう。