Ios NSDictionary和string文本键

Ios NSDictionary和string文本键,ios,objective-c,nsstring,nsdictionary,nsmutabledictionary,Ios,Objective C,Nsstring,Nsdictionary,Nsmutabledictionary,在setObject(id):forKey(id)中使用像@“key”这样的字符串文字是否仅因为编译器优化字符串文字的所有实例以指向同一对象而有效?或者使用objectForKey(id)检索对象是否实际比较键的字符串值 如果NSDictionary是由JSON解析之类的外部函数创建的呢?现在,当我使用键的字符串文本访问对象时,这将是编译器第一次看到键字符串,它将不是JSON解析器在创建字典时使用的同一个对象 当从外部创建的字典访问值时,我是否应该使用valueForKey(NSString*)

setObject(id):forKey(id)
中使用像
@“key”
这样的字符串文字是否仅因为编译器优化字符串文字的所有实例以指向同一对象而有效?或者使用
objectForKey(id)
检索对象是否实际比较键的字符串值

如果
NSDictionary
是由JSON解析之类的外部函数创建的呢?现在,当我使用键的字符串文本访问对象时,这将是编译器第一次看到键字符串,它将不是JSON解析器在创建字典时使用的同一个对象


当从外部创建的字典访问值时,我是否应该使用
valueForKey(NSString*)

NSDictionary是一个哈希表,这意味着首先通过键计算某个函数以查找某个数组中的值索引(称为哈希代码,这是一个快速操作)。
然后,由于某些键可以生成相同的哈希值,因此将此哈希代码的所有键与我们正在搜索的键进行比较。

这并不能回答问题。问题是字符串键与非字符串键对象的处理方式是否不同。通常只有完全相同的键对象与该值匹配。@我不同意这两个计数。它精确地回答了这个问题,字典键匹配不需要命中完全相同的对象。每个NSObject都有哈希函数,该函数计算该哈希值。如果对某些对象来说是相同的,那么就调用equals(isEqual?),那么字符串是特殊的吗?两个不同的非字符串对象不可能匹配同一个键?@Loctus有多少哈希表实现了一个不可能发生键冲突的方案?注意:编译器不会优化同一字符串文本的所有实例以指向同一个对象。曾经是正确的,但通常仍然是正确的,但也有不正确的例子。这就是为什么总是需要使用
IsequalString
isEqual
进行相等性比较,而不是使用“==”进行相等性比较的原因。