我想知道这种便利方法的用途,但无法找到任何答案。
theDictionary[@"key"]
想要从字典中提取值时究竟做了什么?是使用valueForKey:
还是objectForKey:
?
明智的表现是什么?编写像[theDictionary objectForKey:@"key"]
这样的整个消息或者方便方法是否足够?
答案 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:
。