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]);
}
问问题
81 次
3 回答
2
案例 3 是最快且通常更好的方法:
快速枚举是枚举集合内容的首选方法,因为它提供以下好处:
- 枚举比直接使用 NSEnumerator 更有效。
- 项目清单
- 语法简洁。
- 如果在枚举时修改集合,枚举器会引发异常。您可以同时执行多个枚举。
你可以在这里阅读更多关于它的信息
于 2013-10-01T10:08:14.867 回答
2
您也可以使用以下方法枚举数组。stop 参数对性能很重要,因为它允许枚举根据块内确定的某些条件提前停止。
[friends enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
if ('some condition') {
NSLog(@"Object Found: %@ at index: %i",obj, index);
*stop = YES;
}
} ];
于 2013-10-01T11:25:22.443 回答
1
首先要做的事情:选项 1 和 3 在操作方面是相同的,都使用 NSFastEnumeration 协议来提供对集合中对象的快速访问。
正如名称“NSFastEnumeration”所暗示的那样,枚举比 for 循环更快,因为它们不需要检查每个单个对象的数组边界。
所以归结为 1 和 3 之间的品味问题。我个人更喜欢 forin 循环,因为它们似乎更优雅。
于 2013-10-01T10:11:15.003 回答