They do different things; so you need to use the appropriate one:
Consider, if you will:
NSString *a = @"Hello!";
NSString *b = a;
NSString *c = [a mutableCopy];
if (a == b) NSLog(@"This prints");
if (b == c) NSLog(@"This doesn't");
if ([a isEqual:c]) NSLog(@"This does");
In other words; ==
merely checks if two pointers point to the same place, and therefore are the same object; isEqual:
checks if the two objects are equal; in this case a
and b
are the same string, while c
is a new string that is equal to a
, in that it has the same characters in the same order; but it has a different class and a different address.
You'll almost always want to use isEqual:
for objects, and, if they have it, a more specific comparator if they are of the same class (isEqualToString:
, for example).
==
on the other hand you should probably only use for integer data types. (They make little sense for objects, and less for floating point numbers.)