5

我想知道这种便捷方法代表什么,但找不到任何答案。

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

什么是更好的性能明智?像这样写整个消息更好[theDictionary objectForKey:@"key"]还是方便方法就足够了?

4

2 回答 2

4

让我们把它放在一个上下文中:

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

A. 键值编码

键值编码是用-valueForKey:等人完成的。由于这在NSObject几乎所有具有响应此属性的对象(具有可通过键访问的属性)中实现。基本上,此方法从键形成一个选择器并将其发送到对象。除此之外,您还可以构建密钥路径,并且有一些特殊的密钥,即计数。

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

的实例NSDictionary支持这一点。

B. 下标

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

的实例NSDictionary通过简单地发送-objectForKey:等来支持这一点。到self. 但有一点区别,见下文。

C。NSDictionary

另外NSDictionary实现-objectForKey:.

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

如果您不知道接收器的类型,则键值编码很好。

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

于 2016-06-23T18:25:12.350 回答
3

NSDictionary提供objectForKey:访问其内容的方法。valueForKey:在这个相关问题中深入解释了差异:objectForKey和 valueForKey 之间的差异?.

运算[]符是. objectForKey:无论您使用哪种都无关紧要,但前者更易于阅读(代码噪音更少),其意图立即清晰,您不必考虑它是objectForKey:还是valueForKey:.

所以就个人而言,我更喜欢[].

于 2016-06-23T18:11:42.693 回答