在发布的应用程序中使用NSLog
是否明智?我知道不应该在使用频繁的循环中这样做,或者记录过于详细。但我不确定这样做是否是一个好习惯。
在发布之前删除所有NSLog
似乎也不是一个好习惯。
在发布的应用程序中使用NSLog
是否明智?我知道不应该在使用频繁的循环中这样做,或者记录过于详细。但我不确定这样做是否是一个好习惯。
在发布之前删除所有NSLog
似乎也不是一个好习惯。
我认为不向用户设备日志发送垃圾信息是一种良好的做法。
为此,我有一个宏DebugLog
,仅在调试版本中处于活动状态:
#ifdef DEBUG
#define DebugLog(fmt, ...) NSLog(fmt, __VA_ARGS__)
#else
#define DebugLog(fmt, ...)
#endif
对于我在开发中感兴趣的所有日志消息,我使用DebugLog
。 对于应记录的所有错误消息,我使用无条件的NSLog
。 这样,发布版本不会使用户的控制台日志混乱。 只有重要的消息才会被记录。
这是一个编码哲学问题,但在我的生产应用程序中,我使用asl
并将其配置为默认关闭,但保留了启用各种日志记录级别的选项(通过Info.plist
中的条目)。 我倾向于认同您的观点,在发布的应用程序中有太多NSLog
看起来很糟糕。
当有特定的支持团队为现场应用提供支持时,记录日志始终很重要,在这种情况下,他们可以检查发生了什么,并且如果某些事情与代码无关,则可以修复问题,如果是核心代码问题,则可以传递给开发团队。
但是,如果应用程序类似于游戏,则日志不重要。您可以在发布应用程序之前删除它们。
这要看情况。如果你的应用程序中没有使用崩溃报告功能,通常最好保留一些记录关键错误的NSLog语句,以便有经验的用户可以将它们反馈给你,并在发布后帮助你修复应用程序中的问题。但是,在发布版本中不建议有太多深奥的调试NSLog
调用。
#ifndef DEBUG
#define NSLog(x...)
#endif
解释和故障排除:
这意味着如果未定义DEBUG,它将“覆盖”所有的NSLog操作,使其无效。这个字符串替换是在编译之前进行的,因此整个代码中没有一个NSLog会被遗漏,不会因为错误而在生产环境中留下NSLog,这消除了在生产应用程序上忘记删除NSLog的人为错误。
在所有Xcode项目中,默认情况下DEBUG通常在调试模式下被定义。您可以在以下位置找到是否已定义:
Build Settings ->
Apple LLV #.# - Preprocessing ->
Preprocessor Macros -> Debug
DEBUG=1
另外,如果您没有pch文件或未连接,以下是您需要执行的操作(因为在Xcode 5中已自动添加,但在新项目模板上默认情况下不再添加在Xcode 6及以上版本中)
NSLog()
在iOS上只是一个局部调试工具。 - Costique