Re: BOOL value in Dictionary
Re: BOOL value in Dictionary
- Subject: Re: BOOL value in Dictionary
- From: "Gary L. Wade" <email@hidden>
- Date: Fri, 21 Nov 2008 09:29:58 -0700
- Thread-topic: BOOL value in Dictionary
Another interesting thing I've seen with some compilers is when a bit flag
is defined with a signed type:
short someflag : 1;
a value of it being set may be -1 rather than 1, so the only way to compare
it according to how you want it to work is by comparing it against 0 in some
way:
if (!someflag) ...
if (0 == someflag) ...
if (false == someflag) ...
if (0 != someflag) ...
if (false != someflag) ...
After all, zero is always zero, but true-ness can be anything else, unless
you're talking probability.
On 11/21/2008 8:51 AM, "Michael Ash" <email@hidden> wrote:
> On Fri, Nov 21, 2008 at 9:13 AM, Ken Thomases <email@hidden> wrote:
>> Next, even if you did want to construct an NSNumber from it, it's not a
>> BOOL. So +numberWithBOOL: wouldn't be appropriate. Any non-nil object
>> pointer would result in a true-valued NSNumber, even if [temp
>> objectForKey:@"BBLMColorsSyntax"] had given you a false-valued NSNumber.
>>
>
> Wandering off the track a bit, but I think this is interesting....
>
> It's actually not true that any non-nil object pointer will result in
> a true-valued NSNumber. BOOL is not a true boolean yes/no type, but
> rather it's just a signed char. This means that when you assign, pass,
> or return a different numerical or pointer type in a place where BOOL
> is expected the compiler will simply chop off the top bits to make it
> fit. So if the last eight bits of your pointer all happen to be 0
> (which is not that unlikely!) then your BOOL will be false instead of
> true.
>
> This can bite you if you try to take shortcuts with comparisons. For example:
>
> - (BOOL)isNotNil:(id)obj {
> return obj != nil;
> }
>
> Pretend for a moment that this method is not actually completely
> pointless. So you say, but any non-nil value for 'obj' is always true,
> so I can remove the comparison and just write this:
>
> - (BOOL)isNotNil:(id)obj {
> return obj;
> }
>
> Now you've set yourself up for a nasty intermittent failure. This will
> work correctly, *most* of the time. But on a significant percentage of
> non-nil 'obj' values, you'll get NO back.
>
> Yeah, I did this once (with a less-pointless method, of course) and it
> bit me. Fun times debugging that....
>
> Mike
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden