0

例如,假设我有一个NSArray包含一堆对象的NSString对象:

NSArray *games = [NSArray arrayWithObjects:@"Space Invaders", @"Dig Dug", @"Galaga", nil];

这样做有什么好处和坏处:

for (id object in games) {
    NSLog(@"The name of the game is: %@", object);
    NSLog(@"The name is %d characters long.", [object length]);
    // Do some other stuff...
}

相对:

for (NSString *name in games) {
    NSLog(@"The name of the game is: %@", name);
    NSLog(@"The name is %d characters long.", [name length]);
    // Do some other stuff...
}
4

2 回答 2

0

这不是绝对必要的,并且会在每次迭代时强制转换为指定的类型,因此除非您调用特定NSString循环内部的方法,否则我不明白为什么这可能是有益的。

所以,在你的情况下,我会这样做,因为你在每个对象上调用-length(一个方法)。NSString为了避免编译器警告,您将对象转换为特定类型 -NSFastEnumeration当您指定非id类型时,这对您有用。所以,是的,使用你的第二个例子。

于 2011-01-22T20:13:26.103 回答
0

你不能通过指定它的类型来使迭代器通用,就id好像你已经向它传递了一个特定于类的消息一样。如果你想让它“几乎”通用,你可以将层次结构中最顶层的类指定为迭代器的类型,其中包含你计划使用的所有消息。对于你的情况,这个类是 NSString

于 2011-01-22T20:18:26.863 回答