Occasionally I find code which tests if two NSString
s are the same like this:
if ([str1 compare:str2] == NSOrderedSame) {
// Do something
}
Now, I believe this is less readable than using isEqualToString:
and it also has some nasty side effects, like if str1 == nil
the if(..) evaluates to true, or when str2 == nil
havoc might break upon us according to the Apple docs. (Edit: As hatfinch points out, if str1 == nil && str2 == nil
both variants produce the wrong result. So you need to guard yourself against this case anyway).
But before I crusade against those statements in my companys code, I wanted to make sure I didn't miss some important point.
So my question basically boils down to: Is there any difference between a compare:
to NSOrderedSame
and isEqual:
?
Reading the docs, the only differences I can find that you haven't already mentioned are:
isEqualToString:
first compares theid
of the two strings, which is a potential speed gain in an application that makes frequent re-use of strings. From the NSString reference:isEqualToString:
is really more analogous tocompare: options:NSLiteralSearch
, as can be seen in the above quote. NSLiteralSearch is more finicky about Unicode character representation:This is really just nitpicking compared with the false positives and undefined behavior mentioned in your question.
Source: NSString Class Reference