8 comments

[ 4.8 ms ] story [ 28.1 ms ] thread
>Use the bitwise AND operator & to check for a selected bitmask enumeration value.

You should take care if you store result of this in a BOOL (or pass it to a method or function that takes a BOOL). BOOL is only char big and plenty of common Cocoa bitmasks don't have any bits set in that range. For example NSEventMaskEndGesture is (1<<20).

  NSEventMask mask = NSEventMaskEndGesture;
  BOOL end = mask & NSEventMaskEndGesture;
  if (!end) NSLog(@"Oops");
Is this the correct approach?

    BOOL end = mask & NSEventMaskEndGesture ? YES : NO;
(mask & NSEventMaskEndGesture) == NSEventMaskEndGesture is the most correct, as it handles the case where NSEventMaskEndGesture has multiple bits set.
(comment deleted)
I think, not!!

   BOOL end = !! (mask & NSEventMaskEndGesture);
Like a little pair of surprised eyes.

Also works for pointers:

    BOOL hasError = !! errorObj;
This is just plain old C (which, yes, Objective-C is a superset of).
Isn't this applicable to any kind of bitmask, and not just Obj-C?

I suppose that Cocoa uses bitmasks fairly often, but this article could have been titled "Working With Bitmasks in C" and it would have been just as accurate.