Безопасно ли использовать свойство count для получения возвращаемого значения bool с такими утверждениями, как if ([[uiTableView selectedRowIndexes] count]) - PullRequest
1 голос
/ 06 ноября 2010

Может быть, это немного сложно ....

Кто-то сказал, что:

Количество (например, для NSTableView selectedRowIndexes) может легко быть ни ДА, ни НЕТ;с другой стороны, если пользователь выбрал несколько из 256 элементов, младший байт счетчика будет равен 0, поэтому значение BOOL будет равно NO, даже если есть выбор.

Это правда?

Итак, если это небезопасно, использовать выражение вроде if([[uiTableView selectedRowIndexes] count]) {...}, и мы должны использовать if([[uiTableView selectedRowIndexes] count] > 0) {...}.

Верно?Есть комментарии?

Спасибо ...

1 Ответ

4 голосов
/ 06 ноября 2010

Не совсем.

В C, для целей if операторов, любое ненулевое выражение оценивается как true.

В Objective-C тип BOOL является char. Поэтому в любой ситуации, когда вы приводите целочисленное значение к BOOL, явно или неявно, сохраняются только младшие 8 битов, и, таким образом, кратные 256 будут интерпретироваться как NO. Простой способ решить эту проблему - вернуть целое число в BOOL -значной функции:

- (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, в порядке.

...