【发布时间】:2012-01-21 20:13:39
【问题描述】:
建议在运输应用程序中使用NSLogging 吗?我知道我不应该在大量使用的循环中。或者不要太冗长地记录。但我不确定这样做是否是一个好习惯。
在发布之前删除所有 NSLogs 似乎也不是一个好习惯。
【问题讨论】:
标签: iphone objective-c ios nslog
建议在运输应用程序中使用NSLogging 吗?我知道我不应该在大量使用的循环中。或者不要太冗长地记录。但我不确定这样做是否是一个好习惯。
在发布之前删除所有 NSLogs 似乎也不是一个好习惯。
【问题讨论】:
标签: iphone objective-c ios nslog
我认为不要向用户的设备日志发送垃圾邮件是一个好习惯。
为此,我有一个宏 DebugLog,它只对调试版本有效:
#ifdef DEBUG
#define DebugLog(fmt, ...) NSLog(fmt, __VA_ARGS__)
#else
#define DebugLog(fmt, ...)
#endif
对于我对开发感兴趣的所有日志消息,我使用DebugLog。对于应该记录的所有错误消息,我使用无条件的NSLog。通过这种方式,分发版本不会弄乱用户的控制台日志。仅记录重要消息。
【讨论】:
NSLog() 只是一个本地 调试工具。
这是编码哲学问题之一,但在我的生产应用程序中,我使用asl 并将其配置为默认关闭,但保留选项(通过Info.plist 中的条目)以启用各种级别的日志记录.我倾向于同意您的观点,即配送应用中的NSLogs 太多看起来很糟糕。
【讨论】:
当有特定的支持团队来支持实时应用程序时,日志记录总是很重要的,在这种情况下,他们可以检查发生了什么,如果某些事情与代码无关并且是核心代码问题,他们可以解决问题然后他们可以传递给开发团队。
但如果应用程序类似于 Game ,则日志无关紧要。您可以在发布应用程序之前删除它们。
【讨论】:
这取决于。如果您没有在应用程序中使用崩溃报告工具,通常最好保留一些记录严重错误的 NSLog 语句,以便知识渊博的用户可以将它们报告给您并帮助您解决应用程序的问题释放。在您的版本中包含太多深奥的调试NSLog 调用绝对不是一个好主意。
【讨论】:
如果您希望 NSLog 仅在调试时工作,并且您不想对代码进行任何更改,最好的方法是在 .pch 文件上执行此操作: p>
#ifndef DEBUG
#define NSLog(x...)
#endif
解释和故障排除:
这意味着如果未定义 DEBUG 它将“覆盖”所有 NSLog 以不执行任何操作,此字符串替换发生在编译之前,因此整个代码中没有 NSLog 会逃逸,不会错误地将 NSLog 留在生产中,这消除了忘记删除生产应用程序上的 NSLog 的人为错误。
DEBUG 通常在所有 Xcode 项目中默认定义为调试模式。你可以看看它是否定义在:
Build Settings ->
Apple LLV #.# - Preprocessing ->
Preprocessor Macros -> Debug
如果不存在则添加
DEBUG=1
如果你没有 pch 文件或没有连接,这就是你要做的(因为它是在 xcode 5 中自动添加的,但在 xcode 6 和新项目模板中默认不再添加) )
Why isn't ProjectName-Prefix.pch created automatically in Xcode 6?
【讨论】: