我相信在iOS环境中有类似5种布尔类型(来自C,C ++和Objective C)。
至少有四对值:
您认为哪一个最适合(风格明智)用于iOS Objective C开发?
更新1
我提到了一个类型“boolean”。看起来它不存在。我从列表中删除了它并添加了_Bool。
我知道这些类型和值的typedef。问题是关于风格差异。
答案 0 :(得分:5)
iOS和OS X主要由Cocoa组成,它使用值为BOOL
/ YES
的布尔类型NO
。
bool
_Bool
BOOL
/usr/include/objc/objc.h
的Objective-C运行时定义。signed char
。值可以是YES
(0x01),NO
(0x00),也可以是-127到128之间的任何值。YES
/ NO
定义在<Foundation/NSObjCRuntime.h>
bool
,保证为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更改了它的定义,你将受到保护。
答案 1 :(得分:3)
在Objective-C代码中使用BOOL
和YES
/ NO
。这是Objective-C代码中的预期,以及Objective-C头如何定义数据类型。 (请注意,您可能偶尔会处理其他类型/值,例如在检查指针的“真实性”或处理时,例如C ++代码,但Objective-C通常使用BOOL
和YES
/ NO
表示布尔数据类型和值。)
答案 2 :(得分:2)
基本上绝对无动于衷。在实践中,我敢打赌他们甚至以同样的方式宣布:typedef signed char BOOL;
,typedef signed char Boolean;
等。
所以他们实际上是兼容和等同的;但是,最好的方法是尊重期望和返回的类型方法,所以写
[object someObjectiveCMethod:YES];
而不是
[object someObjectiveCMethod:TRUE];
和
CFWhateverSetBooleanProperty(true);
而不是
CFWhateverSetBooleanProperty(YES);
答案 3 :(得分:2)
将ObjC的BOOL用于ObjC代码。使用他们“原生”的其他人。在阅读代码时,任何其他东西都会突显出“不寻常”并且值得格外小心,这是一个应该保留给实际 不寻常且值得特别小心的代码的属性。
答案 4 :(得分:0)
BOOL,YES,NO。
但是BOOL是signed char,所以YES等于1,NO等于0。
在objc.h
中,它们被定义为:
typedef signed char BOOL;
并且
#define YES ((BOOL)1)
#define NO ((BOOL)0)
答案 5 :(得分:0)
如果不是因为读取代码的人可能不知道这种类型,你可以使用每一个。因此,对于惯例,请使用值BOOL
(1)或YES
的{{1}}。