使用括号与objectForKey:或valueForKey从NSDictionary中提取值:

时间:2016-06-23 18:01:27

标签: objective-c objective-c-literals

我想知道这种便利方法的用途,但无法找到任何答案。

theDictionary[@"key"]想要从字典中提取值时究竟做了什么?是使用valueForKey:还是objectForKey:

明智的表现是什么?编写像[theDictionary objectForKey:@"key"]这样的整个消息或者方便方法是否足够?

2 个答案:

答案 0 :(得分:2)

让我们在上下文中有这个:

有多种方法可以访问可通过密钥访问的对象。

一个。键值编码

键值编码是使用-valueForKey:等完成的。由于这是在NSObject中实现的,因此几乎所有具有属性的对象(具有可通过键访问的属性)都对此做出响应。基本上,这个方法从键形成一个选择器并将其发送到对象。除此之外,你有能力建立关键路径,并有一些特殊的钥匙,我。即计数。

这完全在编译器之外实现。

NSDictionary的实例支持此功能。

B中。下标

[]是下标的语法。如果[]之间的密钥是一个对象,则它是键控下标。编译器将该语法转换为-objectForKeyedSubscript:等。信息。接收方必须实现这些方法。

NSDictionary的实例只需发送-objectForKey:等即可支持此功能。到self。但是有一点不同,见下文。

℃。 NSDictionary

此外NSDictionary实施-objectForKey:

没有对错。我个人更喜欢NSDictionary-objectForKey:等实例的最具体的消息。但是,键控订阅可能更具可读性。

如果你不知道接收器的类型,键值编码是好的。

顺便说一句:键值编码和键控下标让你在NSMutableDictionary的实例中设置nil值,而-setObject:forKey:等。禁止那样。

答案 1 :(得分:1)

NSDictionary提供方法objectForKey:来访问其内容。与valueForKey:的差异在此相关问题中得到了深入解释:Difference between objectForKey and valueForKey?

[]运算符是objectForKey:的快捷方式。无论你使用哪个并不重要,但前一个更容易阅读(更少的代码噪音),立即明确其意图,你不必考虑它是objectForKey:还是{{1} }。

所以个人而言,我更喜欢valueForKey: