Rod*_*igo 56 cocoa objective-c nslog
我想在调试时启用NSLog,否则禁用它.一个非常简单的事情是:
#ifdef DEBUG
NSLog(@"My log");
#endif
Run Code Online (Sandbox Code Playgroud)
但所有这一切#ifdef
并且#endif
是无聊的...... :(所以我尝试其他的东西:( .pch是放的好地方)
#ifdef DEBUG
# define NSLog(text) NSLog(text);
#else
# define NSLog(text)
#endif
Run Code Online (Sandbox Code Playgroud)
这项工作非常好(不是递归的).但问题是NSLog有无限的论据.
void NSLog(NSString *format, ...)
Run Code Online (Sandbox Code Playgroud)
我如何解决这个问题才能在预处理器模式下工作?
- 编辑 -
此代码使您的NSLog更好:
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(...)
#endif
Run Code Online (Sandbox Code Playgroud)
Jus*_*Sid 105
这应该做的伎俩:
#ifdef DEBUG
# define NSLog(...) NSLog(__VA_ARGS__)
#else
# define NSLog(...) (void)0
#endif
Run Code Online (Sandbox Code Playgroud)
Ara*_*yan 19
这有点短,并且在使用设备时也会禁用NSLog.如果您正在编写游戏,经常发送的NSLog可以将您的FPS从60降低到20.
#if !defined(DEBUG) || !(TARGET_IPHONE_SIMULATOR)
#define NSLog(...)
#endif
Run Code Online (Sandbox Code Playgroud)
以上所有答案都是正确的.我建议你也可以用以下方式做.假设我有一个没有括号的if语句
if(x==5)
NSLog("x is 5");
Run Code Online (Sandbox Code Playgroud)
如果它将在没有声明的情况下替换NSLog会发生什么.所以我们可以简单地用空循环替换它.
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...) do {} while (0)
#endif
Run Code Online (Sandbox Code Playgroud)
该语句将运行一次空循环.这将安全地从您的所有实时代码中删除您的NSLog.
归档时间: |
|
查看次数: |
29310 次 |
最近记录: |