NSEnumerator* friendsEnumerator = [friends objectEnumerator];
id aFriend;
while ((aFriend = [friendsEnumerator nextObject])) {
printf("%s\n", [aFriend UTF8String]);
}
int friendsCount = [friends count];
for(int i = 0; i < friendsCount; i++) {
printf("%s\n", [[friends objectAtIndex: i] UTF8String]);
}
for(NSString* aFriend in friends) {
printf("%s\n", [aFriend UTF8String]);
}
答案 0 :(得分:2)
案例3是最快且通常更好的方法:
快速枚举是枚举集合内容的首选方法,因为它提供了以下好处:
- 枚举比直接使用NSEnumerator更有效。
- 列表项
- 语法简洁。
- 如果在枚举时修改集合,则枚举器会引发异常。 您可以同时执行多个枚举。
您可以阅读更多相关信息here
答案 1 :(得分:2)
您也可以使用以下方法枚举数组。停止参数对性能很重要,因为它允许枚举根据块中确定的某些条件提前停止。
[friends enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
if ('some condition') {
NSLog(@"Object Found: %@ at index: %i",obj, index);
*stop = YES;
}
} ];
答案 2 :(得分:1)
首先要做的事情是:选项1和3在操作方面是相同的,都使用NSFastEnumeration协议来快速访问集合中的对象。
正如名称“NSFastEnumeration”所暗示的那样,枚举比for循环更快,因为它们不需要检查每个单个对象的数组边界。
所以它归结为1到3之间的味道。我个人更喜欢forin-loops,因为它们看起来更优雅。