Reputation: 3034
I have two NSDictionaries
containing NSStrings
. To compare this two dictionaries I use isEqualToDictionary:
method. The documentation on isEqualToDictionary:
says
"Two dictionaries have equal contents if they each hold the same number of entries and, for a given key, the corresponding value objects in each dictionary satisfy the isEqual: test."
So, my strings are compared by isEqual:
method.
The question is:
How does isEqual:
work for the NSString
?
Does it use isEqual:
from NSObject
?
I've read that isEqual
from NSObject
just compares addresses, using ==
.
To prove or disprove this idea I wrote a sample:
NSString *str1 = @"sampleString";
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"];
BOOL result = [str1 isEqual:str2];
The result
is YES
, the addresses of str1
and str2
are different though.
So, either it does not use isEqual:
from NSObject
(what than?), or NSObject
's isEqual:
does something more complicated then just checking equality of addresses.
Does anybody know how does it really work?
Upvotes: 8
Views: 5436
Reputation: 16588
Compare literal descriptions of dictionaries. I'm using it in unit tests.
NSString *a = dictionary.description;
NSString *b = assertation.description;
BOOL test = [a isEqualToString:b];
Upvotes: 1
Reputation: 2747
isEqualToDictionary compares every object with isEqual.
In my case it doesn't work with NSString object in my dictionary. So i made a very simple workaround. I compare the description of both dictionaries. This works with dictionaries containing NSString and NSNumber and whit all objects containing a description method.
[[myDict1 description] isEqualToString:[myDict2 description]]
Upvotes: 5
Reputation: 70733
NSString
overrides isEqual:
to properly compare strings, so you're perfectly fine to comparing dictionaries this way.
Upvotes: 10