私は次のようなものを使用します:
#ifdef YOUR_DEBUG_ENABLER_SYMBOL_ONLY_SET_IN_DEBUG_BUILDS
#define DEBUG_ONLY(_code_) _code_
#else
#define DEBUG_ONLY(_code_)
#endif
#define DebugLog(_str, ...) DEBUG_ONLY(NSLog(@"%s: " _str, __func__, ## __VA_ARGS__))
NSLogの_strの前にコンマがないことに注意してください。これは、呼び出し元のコードで使用する文字列が(コンパイラによって) "%s:"文字列に追加され、NSLogの複合フォーマット文字列になることを意味します。印刷するパラメータはすべて、渡されたフォーマット文字列に含めることができます。%sは_ _ func _ _に適用され、_strは渡された残りの変数に適用されます。
float f;
int i;
NSString* s;
// Initialise f, i, and s to something
...
// Log the values only when in debug mode, with function name auto-prepended
DebugLog(@"float is: %f - int is: %d - string is: %@", f, i, s);
これには、デバッグ時に条件付きで、出力に関数名を自動的に追加して、必要なテキストと変数をログに記録できるという利点があります。