NSLog和DLog之间的区别

时间:2012-03-11 22:59:55

标签: objective-c cocoa logging nslog

有谁能告诉我NSLogDLog之间有什么区别?

当我查看这个项目代码时,我发现了这个DLog:http://code.google.com/p/iphone-socks-proxy/

5 个答案:

答案 0 :(得分:68)

DLog是一种常用的"调试NSLog"替代方案(只为谷歌)

以下是一套完整的Log #define指令(包括 ULog 基于UIAlertView 的日志记录功能)

// 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

答案 1 :(得分:13)

DLog是一个宏,用于在调试和发布版本中条件化NSLog()的行为。对于发布版本,它将不会打印。 NSLog()用于将格式字符串打印到控制台。

以下是其参考定义:

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

答案 2 :(得分:9)

NSLog是一个内置于Apple提供的Foundation框架中的函数。我从来没有听说过DLog,所以我认为它是一个非标准函数,由您正在查看的代码实现。

答案 3 :(得分:8)

嗨, 在NSLOG替换文件格式的宏cmd下面以及下面我提到的undef Macro以及

<强>定义:

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

答案 4 :(得分:0)

我认为NSLog和DLog之间的一个重要区别是NSLog滞后于程序的执行(想象一下忘记删除生产/发布中的所有NSLog调用),因此出于调试目的,应该使用DLog。