The pointers to -isEqual:
are good, but if you implement -isEqual:
, you absolutely must also implement -hash
in such a way that if two objects return YES
for -isEqual:
they will also return the same value for -hash
. Implementing isEqual:
without also implementing -hash
leads to some very surprising bugs when you use Collections like NSArray.
For new developers, I tend to recommend against overloading -isEqual:
. I recommend instead using the same technique as NSString, and create a custom -isEqualToFoo:
(where Foo
is your class) until you understand the impact of -isEqual:
on collections and specifically want this behavior. Overloading -isEqual:
powerful, but the bugs you can create are subtle. Creating your own custom comparator is safer and clearer in many cases.