如何在设置标志时将代码包含到构建中?

Pro*_*ber 1 iphone objective-c conditional-compilation ipad ios

我已经在我的应用程序中添加了一些调试代码,我只想在需要时调用它.我记得有一些IFDEF可以用来有条件地将代码包含在源文件中.

例如,我可能有这样的事情:

IFDEF kDebugEnabled == YES {
    // some debugging code here
}
Run Code Online (Sandbox Code Playgroud)

然后,如果kDebugEnabled为YES,则只将这段代码编译成二进制文件.

我怎么能这样做?

请注意:我不想使用项目编译器标志设置.我只是想定义一个BOOL(或者同样有用的东西),这是真或假,然后只需在我的App Delegate中轻松设置它.我发现很难导航到项目编译器设置,搜索标志然后设置它.我知道有一个可能有用的Debug标志.

ser*_*gio 5

你在寻找的是:

#ifdef __YOURSYMBOL__
  <conditional code>
#endif
Run Code Online (Sandbox Code Playgroud)

您可以通过编程方式定义__YOURSYMBOL__如下:

 #define __YOURSYMBOL__
Run Code Online (Sandbox Code Playgroud)

__YOURSYMBOL__ 可以是任何有意义的字符串,以便记住您为什么要包含/排除该代码段.

DEBUG常数是一个特殊的预处理器常量,当代码被编译用于调试的编译器专为您定义,所以你可以简单地使用它:

#ifdef DEBUG
         <conditional code>
#endif
Run Code Online (Sandbox Code Playgroud)

考虑到这是C预处理器,而不是C,也不是您正在使用的Objective-C,所以像kDebugEnabled == YES(其中kDebugEnabled是Objective-C变量)这样的测试根本不可能.您可以为常量定义整数值,如下所示:

#define __LOG_LEVEL__ 3
Run Code Online (Sandbox Code Playgroud)

然后测试它:

#if __LOG_LEVEL__ == 3
    ...
Endif
Run Code Online (Sandbox Code Playgroud)