为什么Xcode 5.1仍假设为真?

时间:2014-05-22 22:14:35

标签: objective-c xcode5

当我按下大写字母时输入TRUE或FALSE,它仍然假设我想要小写为true或false。在使用Objective-C时,我相信我们应该使用大写版本,即使它们当前是等效的,但是Xcode不断将其更改为true或false这一事实让我再次猜测。

任何人都知道我们现在可以使用真假吗?

1 个答案:

答案 0 :(得分:6)

C99引入了

truefalsetrue被定义为整数常量1false被定义为每个规范的整数常量0

在C99之前相当远的Apple TRUEFALSE定义相同。

所以事情是可以互换的。

但是,与您的声明相反,在Objective-C中,人们通常使用YESNO而不是TRUEFALSE

从支持盒装表达式的Clang的最新版本开始,这些被定义为:

#define YES __objc_yes
#define NO  __objc_no

如果直接用作文字,编译器将替换(BOOL)1(BOOL)0。使用盒装表达式时会出现差异。这样:

@YES

...是[NSNumber numberWithBool:YES]。除此之外,它还将通过身份(而不是值)与每个其他bool YES对象进行比较。这样:

@(true)

...是[NSNumber numberWithInt:1]。它将按价值进行比较,而不是按身份进行比较。