猿问

是否应该在生产代码上使用NSLog()?

是否应该在生产代码上使用NSLog()?

我在这个网站上被告知了几次,但我想确保确实如此。

我希望能够在我的代码中撒上NSLog函数调用,并且Xcode / gcc会在构建我的Release / Distribution版本时自动删除这些调用。

我应该避免使用它吗?如果是这样,有经验的Objective-C程序员之间最常见的选择是什么?


慕森王
浏览 449回答 3
3回答

慕斯709654

预处理器宏确实非常适合调试。NSLog()没有任何问题,但是使用更好的功能定义自己的日志记录功能很简单。这是我使用的,它包括文件名和行号,以便更容易跟踪日志语句。#define&nbsp;DEBUG_MODE#ifdef&nbsp;DEBUG_MODE&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;DebugLog(&nbsp;s,&nbsp;...&nbsp;)&nbsp;NSLog(&nbsp;@"<%p&nbsp;%@:(%d)>&nbsp;%@",&nbsp;self,&nbsp;[[NSString&nbsp;stringWithUTF8String:__FILE__]&nbsp;lastPathComponent],&nbsp;__LINE__,&nbsp;[NSString&nbsp;stringWithFormat:(s),&nbsp;##__VA_ARGS__]&nbsp;)#else &nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;DebugLog(&nbsp;s,&nbsp;...&nbsp;)&nbsp;#endif我发现将整个语句放在前缀头而不是自己的文件中更容易。如果需要,可以通过让DebugLog与普通的Objective-C对象进行交互来构建更复杂的日志系统。例如,您可以拥有一个写入其自己的日志文件(或数据库)的日志记录类,并包含您可以在运行时设置的“priority”参数,因此调试消息不会显示在您的发行版本中,但错误消息是(如果你这样做,你可以使DebugLog(),WarningLog()等。哦,请记住,#define DEBUG_MODE可以在应用程序的不同位置重复使用。例如,在我的应用程序中,我使用它来禁用许可证密钥检查,并且只允许应用程序在特定日期之前运行。这让我可以轻松地分发一个时间有限,功能齐全的beta版本。
随时随地看视频慕课网APP
我要回答