可能重复:
我应该为 iOS 布尔状态使用什么值?
我相信 iOS 环境中有 5 种布尔类型(来自 C、C++ 和 Objective C)。
- _布尔
- 布尔
- 布尔值
- boolean_t
- 布尔值
它们至少有四对值:
- 真假
- 真假
- 是的,没有
- 1, 0
您认为哪一个最适合用于 iOS Objective C 开发?
更新 1
我提到了一种“布尔”类型。它似乎不存在。我将其从列表中删除并添加了 _Bool。
我知道这些类型和值的 typedef。问题是关于风格差异。
可能重复:
我应该为 iOS 布尔状态使用什么值?
我相信 iOS 环境中有 5 种布尔类型(来自 C、C++ 和 Objective C)。
它们至少有四对值:
您认为哪一个最适合用于 iOS Objective C 开发?
更新 1
我提到了一种“布尔”类型。它似乎不存在。我将其从列表中删除并添加了 _Bool。
我知道这些类型和值的 typedef。问题是关于风格差异。
iOS 和 OS X 主要由 Cocoa 组成,它使用BOOL
带有值YES
/的布尔类型NO
。
bool
_Bool
BOOL
/usr/include/objc/objc.h
.signed char
32 位。值可以是YES
(0x01)、NO
(0x00) 或 -127 到 128 范围内的任何值。 YES
/NO
定义在<Foundation/NSObjCRuntime.h>
.bool
64 位,保证为 0 或 1。Boolean
TRUE
(0x01)、FALSE
(0x00) 或 -127 到 128 范围内的任何值。boolean_t
/usr/include/mach/i386/boolean.h
对于非真正的布尔类型:
很难想象一种或另一种产生影响的情况。在某些情况下,转换为 BOOL 可能会咬到你,还有一些罕见的情况(例如:KVO 将 BOOL 转换为 NSNumber,将 bool 转换为 CFBoolean)。如果有的话,当您始终使用 BOOL 时,您可以在 Apple 更改其定义的情况下得到保障。
在 Objective-C 代码中使用BOOL
和YES
/ 。NO
这在 Objective-C 代码以及 Objective-C 标头如何定义数据类型中是预期的。(请注意,您可能偶尔会处理其他类型/值,例如在检查指针的“真实性”或处理例如 C++ 代码时,但 Objective-C 通常使用BOOL
和YES
/NO
来表示布尔数据类型和值。)
它基本上是完全无动于衷的。在实践中,我敢打赌它们甚至以相同的方式声明:typedef signed char BOOL;
, typedef signed char Boolean;
, 等等。
因此它们实际上是兼容和等效的;然而,最好的方法是尊重期望和返回的类型方法,所以写
[object someObjectiveCMethod:YES];
代替
[object someObjectiveCMethod:TRUE];
和
CFWhateverSetBooleanProperty(true);
代替
CFWhateverSetBooleanProperty(YES);
对 ObjC 代码使用 ObjC 的 BOOL。在他们“本地”的地方使用其他人。在阅读代码时,其他任何东西都会显得“不寻常”并且值得特别注意,这是一个应该为实际上不寻常且值得特别注意的代码保留的属性。
带有 YES 和 NO 的 BOOL。
但是 BOOL 是有符号字符,所以 YES 等于 1,NO 等于 0。
objc.h
它们被定义为:
typedef signed char BOOL;
和
#define YES ((BOOL)1)
#define NO ((BOOL)0)
如果不是因为阅读代码的人可能不知道这种类型,您可以使用每一个。因此,为了约定, use BOOL
which 的值可能为YES
(1) 或NO
.