On Aug 23, 2008, at 5:13 AM, Michael Ash wrote:
On Sat, Aug 23, 2008 at 7:41 AM, Graham Cox <[EMAIL PROTECTED]> wrote:I have a class for which equality can be defined as having the same internalstring value (which happens to be a UUID-turned-string). I can easilyimplement isEqual: based on that but the docs say I also need to implement -hash. Any pointers on what is a good way to do that? Could I just safelydefer to the -hash returned by the string in question?The implementation of -hash should *always* match the implementation of -isEqual:.
And as Jim alluded, -hash must not depend on mutable properties; if the hash changes while the object is in a hashing collection, you'll end up with random crashes.
If you compare primitives in -isEqual:, you should combine them (using xor or the like) in -hash. If you compare objects by calling -isEqual: on them, you should combine their hashes (using xor or the like). If you do some of each, combine them all.
What's the motivation for combining hashes in this case? I've wondered what is the best thing to do when isEqual: is based on comparing multiple ivars; I typically just use one of them for the hash.
thanks, Adam
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]