I have a database model class that is a NSObject. I have a set of these objects in a NSMutableArray. I use indexOfObject: to find a match. Problem is the model object’s memory address changes. So I am overriding the hash method to return the model’s row ID. This however does not fix it. I also have to override the isEqual: method to compare the value of the hash method.
What does the isEqual: method use to determine equality by default?
I’m assuming it uses the memory address. After reading the isEqual: documentation I thought it used the value from the hash method. Obviously, that is not the case as my attempt to override that value did not solve my initial problem.
As you’ve correctly guessed,
NSObject‘s defaultisEqual:behaviour is comparing the memory address of the object. Strangely, this is not presently documented in the NSObject Class Reference, but it is documented in the Introspection documentation, which states:Of course, as you are doubtless aware, subclasses of
NSObjectcan overrideisEqual:to behave differently. For example,NSString‘sisEqual:method, when passed anotherNSString, will first check the address and then check for an exact literal match between the strings.