NSDictionary 和字符串文字键

NSDictionary and string literal keys

setObject(id):forKey(id) 中使用像 @"key" 这样的字符串文字是否只是因为编译器优化了字符串文字的所有实例以指向同一个对象?还是用 objectForKey(id) 检索对象实际上比较键的字符串值?

如果 NSDictionary 是由像 JSON 解析这样的外部函数创建的怎么办?现在,当我使用键的字符串文字访问对象时,这将是编译器第一次看到键字符串,并且它与 JSON 解析器在创建字典时使用的对象不同。

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

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