我想在调试时启用NSLog,否则禁用它.一件非常简单的事情是:

#ifdef DEBUG
NSLog(@"My log");
#endif

但所有这些#ifdef#endif都是出生的(所以我try 了另一件事:(.pch是放置它的好地方)

#ifdef DEBUG
#   define NSLog(text) NSLog(text);
#else 
#   define NSLog(text) 
#endif

这项工作很好(不是递归的).但问题是NSLog有无限的参数.

void NSLog(NSString *format, ...)

如何在预处理器模式下解决这个问题?

--编辑--

这段代码使您的NSLog变得更好:

#ifdef DEBUG
    #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
    #define NSLog(...)
#endif

推荐答案

这应该可以做到:

 #ifdef DEBUG
 #   define NSLog(...) NSLog(__VA_ARGS__)
 #else 
 #   define NSLog(...) (void)0
 #endif

Objective-c相关问答推荐

iPhone SDK 网络连接检测

如何检测 iPhone 5c 的 colored颜色 ?

让 NSRunLoop 等待设置标志的最佳方法?

当前周开始和结束日期

Xcode 中架构的重复符号

iOS 块和对自身的强/弱引用

目标 C:在不离开应用程序的情况下发送Electron邮件

具有匿名函数/块的 NSTimer?

如何在 XCode 4 中创建 dSYM 文件?

在 Objective-C/cocoa 中创建文件夹/目录

使用 DatePicker 展开和折叠 UITableViewCells

如何将@selector 作为参数传递?

AdMob 因 [GADObjectPrivate changeState:] 崩溃:无法识别的 Select 器

如何本地化 iOS 故事板

zoom UIView 及其所有子项

如何在 xcode 项目中启用/禁用 ARC?

如何配置我的应用程序 - 菜单项被禁用?

请求访问相机胶卷的权限

如何获得设备的比例因子?

Xcode没有编译任何项目? 'clang 失败,退出代码 255'