1

也许这有点棘手....

有人说:

计数(例如 NSTableView selectedRowIndexes)很容易既不是 YES 也不是 NO;另一方面,如果用户选择了 256 个项目的倍数,则计数的最低字节将为 0,因此即使有选择,BOOL 值也会为 NO。

这是真的吗?

所以,如果使用这样的语句是不安全的if([[uiTableView selectedRowIndexes] count]) {...},我们应该使用if([[uiTableView selectedRowIndexes] count] > 0) {...}.

对 ?任何意见 ?

谢谢...

4

1 回答 1

4

不完全的。

在 C 中,出于if语句的目的,任何非零值表达式的计算结果都为真。

在 Objective-C 中,BOOL类型是char. 因此,在将整数值BOOL显式或隐式转换为 的任何情况下,仅保留低 8 位,因此 256 的倍数将被解释为NO. 遇到此问题的一种简单方法是在BOOL-valued 函数中返回一个整数:

- (BOOL)arrayIsNotEmpty:(NSArray *)array
{
    // WRONG - will return NO if array contains a multiple of 256 items
    return [array count];

    // RIGHT
    return ([array count] > 0);
}

但是,表格的使用

if ([array count])
    // ...

它将整数评估为真值而不强制转换BOOL为很好。

于 2010-11-05T22:36:21.700 回答