【发布时间】:2010-11-16 14:22:45
【问题描述】:
我已经发现 bool 是 C 类型,而 BOOL 是 Objective-C 类型。 bool 可以是 true 或 false,BOOL 可以是 YES 或 NO
对于初学者来说,很难区分这些类型。如果我使用 bool 而不是 BOOL,会发生什么不好的事情吗?
【问题讨论】:
标签: objective-c
我已经发现 bool 是 C 类型,而 BOOL 是 Objective-C 类型。 bool 可以是 true 或 false,BOOL 可以是 YES 或 NO
对于初学者来说,很难区分这些类型。如果我使用 bool 而不是 BOOL,会发生什么不好的事情吗?
【问题讨论】:
标签: objective-c
BOOL 是 signed char,而 bool 是 int(实际上,在使用 C99 之前的标准编译时,在 Darwin 中它是 typedef'd 一样)。从那里,可以遵循在整数类型之间提升/降级时的通常考虑。
【讨论】:
在常见情况下不太可能出现兼容性问题(将其设置为 YES/1 或 0/NO)。
我建议您参考文档以了解其他情况下的差异: http://developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/c_ref/BOOL
【讨论】:
虽然您可能能够根据自己的需要使用 bool 而不是 BOOL,但您可能会遇到将“bool”传递给其他东西(如公共 API 方法)的问题.在编写 Objective-C 代码时,您应该简单地坚持使用 BOOL,主要是为了面向未来。
但我认为这样做不会导致任何事情发生,只是极力不推荐,并且不遵循任何 Objective-C 的约定。
作为旁注,BOOL 的 YES 或 NO 格式是一种建议,我有将 BOOL 设置为 TRUE 或 FALSE 的坏习惯(注意全部大写),这没问题。您也可以使用 1 或 0。
这些都是有效的:
BOOL myBool;
myBool = YES; // true
myBool = TRUE; // true
myBool = 1; // true
myBool = NO; // false
myBool = FALSE; // false
myBool = 0; // false
【讨论】: