在这里的注释 -- https://dev59.com/EGox5IYBdhLWcg3wKBN9#9393138 -- 我发现当用一个int
值来设置BOOL
的值时,它会有一些意想不到的行为。大多数情况下,如果将该值设置为0x1000
,它将被评估为FALSE
(令人惊讶)。
NSLog(@"All zero? %d %d", (BOOL)0, (bool)0);
NSLog(@"All one? %d %d %d", (BOOL)4095, (BOOL)4096, (BOOL)4097); // 4096=0x1000 or 8-bits
NSLog(@"All one? %d %d %d", (bool)4095, (bool)4096, (bool)4097);
Produces:
All zero? 0 0
All one? -1 0 1
All one? 1 1 1
我认为这很奇怪,但我很少将
int
转换为BOOL
。然而:
- 这是否意味着应该优先使用
bool
而不是BOOL
?为什么? - 可以使用
if (thatBool) {
还是应该使用
if (thatBool ? YES : NO) {
为什么?
注意:这是这个问题的一个更具体的版本--Objective-C : BOOL vs bool--但我认为它增加了问题的深度,不是重复的。
!!
强制类型转换技巧的任何链接?这些东西有点难以搜索 :) - Dan Rosenstark