字典[@" myKey"] VS [字典valueForKey:@" myKey"]

时间:2014-04-15 02:35:16

标签: ios objective-c dictionary nsdictionary

我只是想知道两者之间的差异,哪一个更快以及它们的优缺点。

4 个答案:

答案 0 :(得分:2)

语法dictionary[@"myKey"]与调用[dictionary objectForKeyedSubscript:@"myKey"]相同,这与调用[dictionary objectForKey:@"myKey"]基本相同。

方法valueForKey:用于KVC(键值编码)。如果密钥不以@开头,则最终会在objectForKey:处给出相同的结果,但如果密钥以@开头,则结果将完全不同。

答案 1 :(得分:1)

dictionary[@"myKey"]

被翻译为

[dictionary objectForKeyedSubscript:key]

由编译器等同于

[dictionary objectForKey:key]

dictionary[@"myKey"] = value

被翻译为

[dictionary setObject:newValue forKeyedSubscript:key]

相当于

[dictionary setObject:newValue forKeye:key]

doc from clang

答案 2 :(得分:0)

-valueForKey是一个可以在任何对象上调用的方法,用于获取名为给定“key”的属性的值。它不会在给定字典键的对象的字典中给出值。

但是,如果您想询问-objectForKey,那么dictionary[@"myKey"]只是[dictionary objectForKey:@“myKey”]的简写。他们都编译成同样的东西。

答案 3 :(得分:0)

正如其他人所说,你不应该比较

dictionary[@"key"]

[dictionary valueForKey: @"key"]

第二个valueForKey方法使用非常不同的键值编码(KVC)。

dictionary[@"key"]在功能上等同于[dictionary objectForKey: @"key"]结果是相同的,即使dictionary[@"key"]调用的方法略有不同。

第一个dictionary[@"key"]表单使用了新的" object literal"语法,它是Objective-C语言的最新成员。