結論1:當只是遍歷NSArray的時候使用For-in會比較快速, 推薦使用For-in遍歷數組. 結論2:當我們想遍歷NSDictionary的時候, 推薦使用enumerateKeysAndObjectsUsingBlock 不僅僅是因為速度快, 更是因為代碼更優雅和直觀. 使用block同時遍歷字典key,value block版本的字典遍歷可以同時取key和value(forin只能取key再手動取value),如: NSDictionary *dict = @{@"a": @"1", @"b": @"2"}; [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"key: %@, value: %@", key, obj); }]; 對於耗時且順序無關的遍歷,使用並發版本 [dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key,id obj,BOOL *stop) { NSLog(@"key:%@-----value:%@----",key,obj); }]; 對於數組 NSArray*array =@[@"1",@"2",@"3",@"4",@"5"]; [array enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL * stop) { NSLog(@"1:%@----%d",obj,(int)idx); }]; //並發遍歷(與CPU的核數有關) [array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj,NSUInteger idx,BOOL * stop) { NSLog(@"2:%@----%d",obj,(int)idx); }]; //倒序遍歷 for(NSString *string in [array reverseObjectEnumerator]) { NSLog(@"12:%@----",string); } //倒序遍歷 [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj,NSUInteger idx,BOOL* stop) { NSLog(@"13:%@----%d",obj,(int)idx); }];