2012-02-07 6 views
3

私はいくつかのNSLogを持つ大規模なXcodeプロジェクトを持っていますが、いくつかはコメントアウトしています。NSLogをオン/オフするための正規表現ですか?

Xcodeでの検索/置換には正規表現オプションがあります。どのようにしてアクティブなNSLogをコメントアウトさせることができますか?別の検索/置換で再び有効にすることができます。だから、最初のコードは次のとおりです。

//NSLog(@"one"); 
NSLog(@"two"); 

は、正規表現の検索の後、なり/置き換え:オンに戻す

//NSLog(@"one"); 
//**NSLog(@"two"); 

は次のようになります。

//NSLog(@"one"); 
NSLog(@"two"); 
+0

あなた自身の質問に答えたと思います。それらを有効にするには、 '// ** NSLog' – Max

+0

noを見つけて置き換えてください。既存のコメント付きNSLogをそのまま残さないでください。 – cannyboy

+0

@cannyboy:通常のエクスプレッションがオンになっている場合は、アスタリスク '// \ *をエスケープする必要があります。 \ * NSLog' – JeremyP

答えて

4

は、はるかに優れたソリューションがあります。 prefix.pchファイルに入れてください:

//disable logging when not in debug 
#ifndef DEBUG 
#undef NSLog 
#define NSLog(args, ...) 
#endif 

これは、あなたのアプリがデバッグモードでない場合、NSLogsを無効にします。そうすれば、コードから実際に削除する必要はありませんが、パフォーマンスに影響はありません。

どのように動作するのか不思議である場合は、DEBUGマクロが定義されていないときに、NSLog()関数を空白として再定義します。デフォルトではDEBUGはデバッグプロジェクトに対してのみ定義されています。最初の行を#if SOME_OTHER_CONDITIONに置き換えるだけで、異なる方法でオンとオフを切り替えることができます。

+0

+1 @nickそれは素晴らしい解決策ですが、 'NSLog'はマクロの代わりに関数だとは思わないでください。 –

+0

これは理論的な解決策ではありません。あなたはNSLogが関数であることは間違いありませんが、それを定義しておらず、マクロとして再定義するとうまくいきます。 –

+1

'#define NSLog(...)(void)0'というやや優れていると思います。これはコンパイラの警告を防ぎ、あなたのコードをもう少し穏やかに保ちます - '(void)0'は無駄よりも実際の文に近いです。 – mvds

1

これは、デバッグ(または独自のコンパイラフラグ)を使用して制御できるDLogなどのマクロを使用する方がよいでしょう。これをチェックしてくださいlinkまたはthis

関連する問題