比较包含NSStrings的NSDictionaries

Ana*_*sia 8 macos cocoa objective-c foundation ios

我有两个NSDictionaries含有NSStrings.为了比较这两个词典我使用isEqualToDictionary:方法.关于isEqualToDictionary:说的文件

"如果两个词典各自拥有相同数量的条目,则两个词典具有相同的内容;对于给定的键,每个词典中的相应值对象满足isEqual:test."

所以,我的字符串通过isEqual:方法进行比较.

问题是:
如何isEqual:为此工作NSString

是否使用isEqual:NSObject?我读过,isEqualNSObject仅使用比较地址==.为了证明或反驳这个想法,我写了一个样本:

NSString *str1 = @"sampleString";
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"];
BOOL result = [str1 isEqual:str2];
Run Code Online (Sandbox Code Playgroud)

resultYES,的地址str1str2是不同的东西.
所以,要么它不使用isEqual:来自NSObject(还有什么比?),或者NSObjectisEqual:做一些更复杂的然后就检查地址的平等.

有谁知道它是如何工作的?

cob*_*bal 10

NSString覆盖isEqual:以正确比较字符串,因此您可以通过这种方式比较字典.


Sam*_*Sam 5

isEqualToDictionary将每个对象与isEqual进行比较.

在我的情况下,它不适用于我的字典中的NSString对象.所以我做了一个非常简单的解决方法.我比较两个词典的描述.这适用于包含NSString和NSNumber的字典,以及包含描述方法的所有对象.

[[myDict1 description] isEqualToString:[myDict2 description]]
Run Code Online (Sandbox Code Playgroud)