Цель-C: Ошибка BOOL и bool? - PullRequest
       22

Цель-C: Ошибка BOOL и bool?

2 голосов
/ 04 августа 2009

Я уже обнаружил, что bool - это C-тип, а BOOL - это Objective-C. bool может быть истинным или ложным, а BOOL может быть ДА или НЕТ

Новичкам бывает сложно различить эти типы. Есть ли что-нибудь плохое, что может случиться, если я использую bool вместо BOOL?

Ответы [ 3 ]

5 голосов
/ 04 августа 2009

BOOL - это signed char, в то время как bool - это int (на самом деле это typedef 'как таковое в Дарвине при компиляции со стандартами до C99). Оттуда можно следовать обычным соображениям при продвижении / понижении между целочисленными типами.

4 голосов
/ 04 августа 2009

Хотя вы можете избежать использования bool вместо BOOL для своих собственных нужд, у вас могут возникнуть проблемы с передачей 'bool' чему-то другому (например, метод публичного API). Вы должны просто придерживаться BOOL при написании кода Objective-C, в основном для будущего.

Но я не думаю, что что-то взорвется, если вы это сделаете, просто крайне не рекомендуется и не следует ни одному из соглашений Objective-C.

В качестве дополнительного примечания, формат BOOL YES или NO является своего рода предложением, у меня была плохая привычка устанавливать BOOL в TRUE или FALSE (обратите внимание на заглавные буквы), и это не проблема. Вы также можете использовать 1 или 0.

Это все действительные:

BOOL myBool;
myBool = YES;   // true
myBool = TRUE;  // true
myBool = 1;     // true
myBool = NO;    // false
myBool = FALSE; // false
myBool = 0;     // false
0 голосов
/ 04 августа 2009

В большинстве случаев проблемы совместимости маловероятны (установите значение YES / 1 или 0 / NO).

Я предлагаю вам обратиться к документации для различий в других случаях: http://developer.apple.com/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/c_ref/BOOL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...