web-dev-qa-db-ja.com

NSLogとDLogの違い

NSLogDLogの違いを教えてもらえますか?

このプロジェクトコードを調べていたときに、このDLogについて見つけました: http://code.google.com/p/iphone-socks-proxy/

23
slonkar

NSLogは、Appleが提供するFoundationフレームワークに組み込まれている関数です。DLogについて聞いたことがないので、非標準だと思います。あなたが見ているコードによって実装されている関数。

8
Kurt Revis

DLogは、一般的に使用される「Debug NSLog」の代替手段です(Googleだけ)

Log #defineディレクティブの完全なセットは次のとおりです(ULogUIAlertViewベースのロギング機能を含む)

// DLog will output like NSLog only when the DEBUG variable is set

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#   define DLog(...)
#endif

// ALog will always output like NSLog

#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG
#   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
#else
#   define ULog(...)
#endif

それらをプリコンパイルヘッダー(.pch)ファイルに入れるだけです。

(出典: http://overbythere.co.uk/blog/2012/01/alternatives-nslog

69
Pascal

DLogは、デバッグビルドとリリースビルドでのNSLog()の動作を条件化することを目的としたマクロです。リリースビルドの場合、何も出力されません。 NSLog()は、フォーマット文字列をコンソールに出力するためのものです。

参考のためにその定義は次のとおりです。

#ifdef DEBUG
#    define DLog(...) NSLog(__VA_ARGS__)
#else
#    define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
13
CodaFi

こんにちは、NSLOG置換ファイル形式のマクロcmdの下、およびundefマクロと

定義:

#define _LOG_TO_CONSOLE_ //#undef _LOG_TO_CONSOLE_
#ifdef _LOG_TO_CONSOLE_
#define DLog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define DLog(format, ...)
#endif
8
sathish

NSLogとDLogの重要な違いは、NSLogがプログラムの実行に遅れをとることです(本番/公開ですべてのNSLog呼び出しを削除するのを忘れると想像してください)。したがって、デバッグの目的でDLogを使用する必要があります。

0
Nora Madjarova