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?
NSString
overrides isEqual:
to properly compare strings, so you're perfectly fine to comparing dictionaries this way.
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]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With