• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: BOOL value in Dictionary
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

References: 
 >Re: BOOL value in Dictionary (From: "Michael Ash" <email@hidden>)

  • Prev by Date: Re: WebServices / SOAP / REST
  • Next by Date: Re: Autorelease Question
  • Previous by thread: Re: BOOL value in Dictionary
  • Next by thread: Re: BOOL value in Dictionary
  • Index(es):
    • Date
    • Thread