我阅读了Mike Ash 的 Objective-C 陷阱页面,现在我对隐式类型的变量转换id
为BOOL
.
假设我有一个低位清零的“危险”指针,因此即使它指向有效对象,将其转换为 aBOOL
也会产生。NO
我们称之为“危险”指针foo
。
简单的 if 语句如何工作?if 语句在评估条件时是否foo
转换为 a ?BOOL
或者它是否转换为纯布尔值?
if( foo )
{
[myArray addObject:foo];
}
它在三元表达式中的工作方式相同吗?
// Does this break when foo is 'dangerous'?
self.titleLabel.hidden = foo ? YES : NO ;
或者,如果我这样做,三元组只会中断:
// I'm pretty sure it breaks now
self.titleLabel.hidden = ((BOOL)foo) ? YES : NO ;
我觉得我缺少一些关于 C 中逻辑运算的基本知识,以及它们与BOOL
. 请帮我解惑。