• 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: Integer as key in NSMutableDictionary
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Integer as key in NSMutableDictionary


  • Subject: Re: Integer as key in NSMutableDictionary
  • From: Marcel Weiher <email@hidden>
  • Date: Wed, 6 May 2009 18:39:40 -0700

Hi Greg,

hope the runtime is being docile. :-)

On May 4, 2009, at 23:24 , Greg Parker wrote:

That's right. In some discussions of object-oriented programming, a distinction is made between "value objects" and "reference objects". Two value objects can be "equal" if they share the same "value", even if they are separately allocated objects with different pointer addresses in memory. For reference objects, "equal" means they have the same pointer address.

Minor nit: the distinction between identity and equality isn't really tied to having value objects, though there is some overlap, and value objects in Cocoa are somewhat ad-hoc. Smalltalk is a little more consistent here, in that it has there is a simple distinction between identity and equality, with = message for equality and == for identity.


NSNumber acts as a value object by this terminology, because NSNumber's -isEqual: and -hash methods operate on the represented number value, ignoring the actual allocation addresses. On the other hand, NSWindow is a reference object; nobody would consider two different NSWindow objects "equal" even if they shared the same name and contents and position on screen.

Actually, the distinction tends to be somewhat different:

- for value objects, when they are equal they are also considered identical, so two instances of the number 2 are considered indistinguishable. In Cocoa-practice, that they are in fact indistinguishable doesn't necessarily hold, though the frameworks pretty much assume that and so they should be treated as such.
- for other objects, equality does not imply identity, so two windows could be considered equal if they have the same content, but no-one would consider them to be the same object ( not that -isEqual: is necessarily implemented that way).



NSDictionary uses -isEqual: and -hash everywhere, so the contained objects get to decide whether they act as value objects or reference objects.

Well, this also depends on how they react to copy.

NSWindow's -isEqual: implementation simply compares the pointer addresses and returns that result, while NSNumber's -isEqual: implementation also looks at the represented number values stored the objects.

If it's a true value object, it needs to *only* look at the value, not "also".


A CFDictionary can be configured to treat all of its objects as reference objects, ignoring any -isEqual: implementations. (Such a dictionary would no longer be compatible with NSDictionary, though.)

It would be an IdentityDictionary.

Cheers,

Marcel
_______________________________________________

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: 
 >Integer as key in NSMutableDictionary (From: Weydson Lima <email@hidden>)
 >Re: Integer as key in NSMutableDictionary (From: Alexander Heinz <email@hidden>)
 >Re: Integer as key in NSMutableDictionary (From: Jean-Daniel Dupas <email@hidden>)
 >Re: Integer as key in NSMutableDictionary (From: Weydson Lima <email@hidden>)
 >Re: Integer as key in NSMutableDictionary (From: Jonathan Hess <email@hidden>)
 >Re: Integer as key in NSMutableDictionary (From: Greg Parker <email@hidden>)

  • Prev by Date: Re: Problem Embedding Cocoa Framework
  • Next by Date: Re: Problem Embedding Cocoa Framework
  • Previous by thread: Re: Integer as key in NSMutableDictionary
  • Next by thread: Re: Integer as key in NSMutableDictionary
  • Index(es):
    • Date
    • Thread