NSDictionary - (for id foo in dict) vs (for NSString *foo in



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

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

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

第一种变体使用NSDictionaries实现"快速枚举"(NSFastEnumeration Protocol),而第二种使用NSArray实现。我怀疑第一个变体会稍微快一点(至少它少了一点打字)。

顺便说一句,你也可以写

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

请注意,与之前的海报所建议的不同,这并不能保证所有键都是 NSString 对象。它只是将key隐含地投射到NSString *

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

在这里,您不确定您的密钥是NSString还是NSNumber或任何NSObject

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

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

没有区别。两个版本都执行相同的操作。

最新更新