我想知道这种便捷方法代表什么,但找不到任何答案。
theDictionary[@"key"]
当想要从字典中提取值时,究竟做了什么?是使用valueForKey:
还是objectForKey:
?
什么是更好的性能明智?像这样写整个消息更好[theDictionary objectForKey:@"key"]
还是方便方法就足够了?
我想知道这种便捷方法代表什么,但找不到任何答案。
theDictionary[@"key"]
当想要从字典中提取值时,究竟做了什么?是使用valueForKey:
还是objectForKey:
?
什么是更好的性能明智?像这样写整个消息更好[theDictionary objectForKey:@"key"]
还是方便方法就足够了?
让我们把它放在一个上下文中:
有多种方法可以访问可通过键访问的对象。
A. 键值编码
键值编码是用-valueForKey:
等人完成的。由于这在NSObject
几乎所有具有响应此属性的对象(具有可通过键访问的属性)中实现。基本上,此方法从键形成一个选择器并将其发送到对象。除此之外,您还可以构建密钥路径,并且有一些特殊的密钥,即计数。
这完全在编译器之外实现。
的实例NSDictionary
支持这一点。
B. 下标
[]
是下标的语法。如果 和 之间的键[
是]
对象,则为键控下标。编译器将该语法转换为-objectForKeyedSubscript:
等。信息。接收者必须实现这些方法。
的实例NSDictionary
通过简单地发送-objectForKey:
等来支持这一点。到self
. 但有一点区别,见下文。
C。NSDictionary
另外NSDictionary
实现-objectForKey:
.
没有对错之分。就个人而言,我更喜欢NSDictionary
, -objectForKey:
et al 的实例的最具体的消息。但是,键控订阅可能更具可读性。
如果您不知道接收器的类型,则键值编码很好。
顺便说一句:键值编码和键控下标让您可以在NSMutableDictionary
, 而-setObject:forKey:
等人的实例中设置 nil 值。禁止这样做。
NSDictionary
提供objectForKey:
访问其内容的方法。valueForKey:
在这个相关问题中深入解释了差异:objectForKey和 valueForKey 之间的差异?.
运算[]
符是. objectForKey:
无论您使用哪种都无关紧要,但前者更易于阅读(代码噪音更少),其意图立即清晰,您不必考虑它是objectForKey:
还是valueForKey:
.
所以就个人而言,我更喜欢[]
.