比较包含NSString的NSDictionaries

我有两个包含NSStrings NSDictionaries 。 为了比较这两个字典我使用isEqualToDictionary:方法。 关于isEqualToDictionary:的文档说:

“如果两个字典每个都拥有相同数量的条目,并且对于给定的键,每个字典中相应的值对象满足isEqual:test,则两个字典具有相同的内容。

所以,我的string通过isEqual:方法进行比较。

问题是:
isEqual:如何工作的NSString

它使用isEqual:来自NSObject吗? 我读过NSObject isEqual只是比较地址,使用== 。 为了certificate或反驳这个想法,我写了一个例子:

 NSString *str1 = @"sampleString"; NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"]; BOOL result = [str1 isEqual:str2]; 

resultYESstr1str2的地址虽然不同。
所以,要么不使用isEqual:NSObject (比什么?),或NSObjectisEqual:做一些更复杂的事情,然后只是检查地址的相等性。

有人知道它是如何工作的吗?

NSString重载isEqual:为了正确地比较string,所以你用这种方式比较字典是完全没问题的。

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

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

 [[myDict1 description] isEqualToString:[myDict2 description]] 

比较字典的文字描述 。 我在unit testing中使用它。

 NSString *a = dictionary.description; NSString *b = assertation.description; BOOL test = [a isEqualToString:b];