在使用编译器指令时,我不清楚以下两个代码段中哪一个是正确的/首选的,以及为什么.我见过的大多数开发人员和开源项目似乎都使用第一种方法,但我也看到第二种方法也经常使用.

#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

以上哪一段代码更适合只在调试时运行代码?为什么?我的猜测是,如果DEBUG被定义为TRUE或FALSE,第一个将运行,而第二个将仅在DEBUG被定义并设置为TRUE时运行.对吗?

推荐答案

你说得对.如果DEBUG被定义为0#if DEBUG将不进行判断.

至于何时使用每一个,如果存在预处理器定义,则只需要add个代码就可以使用#ifdef,例如添加调试日志(log)记录.如果需要判断值并沿着不同的编译路径,那么我将使用01.一个很好的例子是TARGET_IPHONE_SIMULATOR,它总是为一个iOS项目定义的,但是如果你是为模拟器编译的话,它只有1.

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

如何打印 NSMutableURLRequest?

如何在运行时向对象添加属性?

具有动态高度的子视图的自动布局 UIScrollView

performSelector 的返回值:

在子类中覆盖init

目标 C:在不离开应用程序的情况下发送Electron邮件

NSTimeInterval 格式

有没有办法清除 UIImage 类使用的缓存?

将长格式的 NSString 拆分为多行

观察 UIDatePicker 的变化

如何从 Xcode4 生成 UML 图

如何测试推送通知在我的应用程序中是否有效

UILabel 的角半径属性在 iOS 7.1 中不起作用

从 UITabBarController 在当前上下文中呈现模态视图控制器后出现黑屏

在 NSArray 中查找最大数值

如何在 Objective C 中将浮点数转换为 int?

判断 NSString 是否仅包含字母数字 + 下划线字符

分组的 UITableView 在底部有 20px 的额外填充

iPhone SDK:如何在视图中播放视频?而不是全屏