Sunday, 1 March 2015

Comparisons to YES are broken

This post is inspired from the eye-opener article -> bignerdranch.

I always had this question, Why does Objective-C need a BOOL when C gives it a free bool, which effectively works the same?.

Well, I couldn’t have been more wrong. BOOL and bool are entirely different beasts.

BOOL is a typedef, defined at /usr/include/objc/objc.h (Also available here)

typedef signed char BOOL;

Similar to, Boolean, which is defined at /usr/include/MacTypes.h (Also available here)

typedef unsigned char Boolean;

Also, YES and NO are macros for 1 and 0. Reference

#define YES (BOOL)1
#define NO (BOOL)0

This means that our usual comparisons might fail. Example:

12 == YES

For more such examples, look at bignerdranch.

The thing to note is that, you should be careful about the same comparisons for Boolean too.