代码之家  ›  专栏  ›  技术社区  ›  Vassilis

使用count属性获取返回的bool值是否安全,语句如if([[uiTableView selectedRowIndexes]count])

  •  1
  • Vassilis  · 技术社区  · 14 年前

    有人说:

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

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

    有什么意见吗?

    谢谢。。。

    1 回复  |  直到 14 年前
        1
  •  4
  •   dwineman    13 年前

    不完全是。

    在C中,为了 if

    在目标C中 BOOL 类型是 char . 所以在任何情况下 ,显式或隐式地,仅保留较低的8位,因此256的倍数将被解释为 NO . 遇到这个问题的一个简单方法是在 -值函数:

    - (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])
        // ...
    

    它将整数作为真值进行计算,而不强制转换为 布尔 很好。