While NSNumber bools will be constants and this will work fine, this is technically inaccurate. i.e., this should be:
&& (current != newValue) && ![current isEqual:newValue]

The pointer compare is for nil vs nil. The isEqual is for different objects holding the same value.