前言:
對於ios專案開發中總會遇見各種集合遍歷,出於對各種遍歷效率的好奇心,所以準備寫個測試程式測試一下
首先:先宣告一個NSMutableArray,測試資料量分別是1000條,10000條,100000條。
int testMaxCount =1000;//10000,100000 NSMutableArray *testArray=[[NSMutableArray alloc]init]; for (int i =0; i<testMaxCount; i++) { [testArray addObject:@"test"]; }
第一種:普通for迴圈
//普通for迴圈 CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); for(int i =0;i<[testArray count];i++){ NSLog(@"%@",testArray[i]); } CFAbsoluteTime end = CFAbsoluteTimeGetCurrent(); NSLog(@" 普通for迴圈 time cost: %0.3f", end - start);
第二種:for in 迴圈
// for in 迴圈 start = CFAbsoluteTimeGetCurrent(); for(NSString *tempStr in testArray){ NSLog(@"%@",tempStr); } end = CFAbsoluteTimeGetCurrent(); NSLog(@" for in 迴圈 time cost: %0.3f", end - start);
第三種:程式碼塊迴圈
//程式碼塊 start = CFAbsoluteTimeGetCurrent(); [testArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"%@",obj); }]; end = CFAbsoluteTimeGetCurrent(); NSLog(@"程式碼塊 迴圈 time cost: %0.3f", end - start);
第四種:列舉器迴圈
//列舉器 start = CFAbsoluteTimeGetCurrent(); NSEnumerator *enumerator=[testArray objectEnumerator]; while (enumerator.nextObject) { NSLog(@"%@",enumerator.nextObject); } end = CFAbsoluteTimeGetCurrent(); NSLog(@"列舉器 迴圈 time cost: %0.3f", end - start);
執行結果:
1.測試資料 1000條 10000條 100000條
普通for迴圈:0.391 2.390 18.400
for- in迴圈 :0.226 2.782 15.172
程式碼塊迴圈 :0.241 2.744 15.123
列舉器迴圈 :0.147 1.429 7.432
結論:遍歷最快速的是列舉器遍歷 其他三種遍歷效率 相差無幾