哪种技术在这三种技术中会非常快?

时间:2013-10-01 09:59:19

标签: iphone ios objective-c

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]);

}

3 个答案:

答案 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,因为它们看起来更优雅。