Xcode 5 和 iOS 7 更新
注意:对于在发布版本中删除 print() 语句的 Xcode 7 / Swift 2.1 解决方案,请找到我的答案 here。 em>
是的,您应该删除发布代码中的任何 NSLog 语句,因为它只会减慢您的代码速度,并且在发布版本中没有任何用处。幸运的是,在 Xcode 5 (iOS 7) 中,在发布版本中“自动”删除所有 NSLog 语句非常简单。那么为什么不这样做呢。
首先要采取的 3 个步骤,然后是一些解释
1) 在您的 Xcode 项目中,找到“yourProjectName-prefix.pch”文件(通常您会在您的 main.m 文件所在的“支持文件”组下找到它
2) 在“.pch”文件的末尾添加这 3 行:
#ifndef DEBUG
#define NSLog(...);
#endif
3) 测试您的“调试”和“发布”版本之间的差异。一种方法是通过“编辑方案”->“运行应用程序名称”-> 在“信息”选项卡下使用调试和发布之间的下拉框进行选择。在发布版本中,您不会在调试控制台中看到任何 NSLog 输出!
这一切是如何运作的?
首先,必须知道预处理器相对“笨”,在调用编译器之前只是充当“文本替换器”。它用#define 语句后面的内容替换您“#define”的任何内容。
#define NSLog(...);
(...) 代表括号 () 之间的“任何东西”。最后还要注意;。这不是绝对必要的,因为编译器会优化它,但我喜欢把它放在那里,因为它更“正确”。在我们的#define 之后有'nothing',所以预处理器会将它替换为'nothing',所以它会丢弃整行,从NSLog... 开始直到并包括;。
define 语句可以使用#ifdef(如果已定义)或#ifndef(如果未定义)来设置条件
这里我们写#ifndef DEBUG,意思是'如果符号DEBUG没有定义'。 #ifdef 或 #ifndef 需要使用 #endif“关闭”
当 de build mode 为“DEBUG”时,Xcode 5 默认为我们定义了“DEBUG”符号。在“发布”中,这是没有定义的。您可以在项目设置下验证这一点,选项卡“构建设置”-> 向下滚动到“Apple LLVM 5.0 - 预处理”-> 预处理器宏部分。您会看到符号“DEBUG”没有为发布版本定义!
最后,.pch 文件由 Xcode 自动创建,并在编译期间自动包含在每个源文件中。因此,就好像您将整个 #define 内容放入每个源文件中一样。