What is the difference between isEqual: and isEqualToString:?
Why are classes adding isEqualTo* methods (isEqualToArray for NSArray, isEqualToData for NSData, ...) instead of just overriding isEqual: ?
What is the difference between isEqual: and isEqualToString:?
Why are classes adding isEqualTo* methods (isEqualToArray for NSArray, isEqualToData for NSData, ...) instead of just overriding isEqual: ?
My guess is that it provides a slight performance enhancement, as isEqualToString: won't have to type-check what's passed in.
isEqual: compares a string to an object, and will return NO if the object is not a string. isEqualToString: is faster if you know both objects are strings, as the documentation states.
isEqualTo<Class> is used to provide specific checks for equality. For instance; isEqualToArray: checks that the number of objects at each index are equal, and that the objects at a given index return YES for the isEqual: test.
Also, for writing your own -isEqual: and -isEqualTo<Class>: methods, the convention is to allow nil arguments for -isEqual: and raise an exception for nil arguments to -isEqualTo<Class>: