NSDictionary - (对于dict中的id foo)vs(对于[dict allKeys]中的NSString * foo)

时间:2013-09-19 05:37:22

标签: objective-c

假设有一个NSDictionary *dict。 以下是什么区别?

for (id key in dict) {
  NSLog(@"value: %@", dict[key]);
}

for (id key in [dict allKeys]) {
  NSLog(@"value: %@", dict[key]);
}

我不知道第一个版本存在,当我看到它时,我认为这将是一个编译时错误。

3 个答案:

答案 0 :(得分:3)

第一个变体使用NSDictionaries实现“快速枚举”(NSFastEnumeration Protocol),而第二个使用NSArray实现。我怀疑第一个版本的速度会稍快一点(至少它的输入会少一些)。

BTW你也可以写

for (NSString *key in dict)
{
     NSLog(@"value: %@", dict[key]);
}

请注意,与之前的海报建议不同,这并不能保证所有密钥都是NSString对象。它只是keyNSString *的隐式转换。

答案 1 :(得分:0)

for (id key in dict) {
  NSLog(@"value: %@", dict[key]);
}

此处您不确定您的密钥是NSString还是NSNumber还是NSObject

for (NSString *key in [dict allKeys]) {
  NSLog(@"value: %@", dict[key]);
}

而在此代码段中,您确定字典的键是NSString

答案 2 :(得分:0)

没有区别。两个版本都是一样的。