OC各種遍歷方法的效率比較

2021-09-10 07:15:51 字數 2332 閱讀 3723

看了一篇部落格,挺有意思,oc各種遍歷方法的效率,打算自己也測試一番。看看,究竟哪乙個的效率更好一些!

準備工作:懶載入乙個陣列,建立一千萬個物件新增到陣列。

1

#pragma mark - lazy methods

2 - (nsmutablearray *)objarray 8}

9return

_objarray;

10 }

1.測試普通 for 迴圈

1

#pragma mark - 測試普通 for 迴圈

2 - (void

)testcommonforcycle

8 nslog(@"

end"

);9 }

控制台輸出:

1

2016-03-16

16:59:33.301 oc各種遍歷方法的效率比較[5462:405485

] beign

22016-03-16

16:59:40.985 oc各種遍歷方法的效率比較[5462:405485] end

我暈,我這裡耗時相差了 7.684s

2.測試 for-in

1

#pragma mark - 測試 for-in

2 - (void

)testforincycle

8 nslog(@"

end"

);9 }

控制台輸出:

1

2016-03-16

17:06:35.303 oc各種遍歷方法的效率比較[5477:410562

] beign

22016-03-16

17:06:40.789 oc各種遍歷方法的效率比較[5477:410562] end

耗時相差了 5.486s。 time(for-in) < time(for)

3.測試block塊

1

#pragma mark - 測試block

2 - (void

)testblock ];

8 nslog(@"

end"

);9 }

控制台輸出:

1

2016-03-16

17:10:28.941 oc各種遍歷方法的效率比較[5543:414507

] beign

22016-03-16

17:10:36.603 oc各種遍歷方法的效率比較[5543:414507] end

耗時相差了 7.662s。time(for-in) < time(block) < time(for)

4.測試 列舉器

1

#pragma mark - 測試 列舉器

2 - (void

)testenumerator

9 nslog(@"

end"

);10 }

控制台輸出:

1

2016-03-16

17:16:31.255 oc各種遍歷方法的效率比較[5565:418958

] beign

22016-03-16

17:16:37.447 oc各種遍歷方法的效率比較[5565:418958] end

耗時相差了 6.192s。

粗略的得出的結論(不精確的):time(for-in) < time(enumerator) < time(block) < time(for)

雖然粗略的看出 block塊迴圈耗時較高,但是我們可以看到block塊的優勢:

1 nsarray *array = @[@"

1", @"

2", @"

3", @"4"

];2 [array enumerateobjectsusingblock:^(nsstring *obj, nsuinteger idx, bool *_nonnull stop)

6 nslog(@"

obj=%@, idx=%lu

", obj, idx);

7 }];

再者,專案中不會出現遍歷這麼多的陣列元素,所以哪個適合自己就用哪個!

參考文件:原文

posted @

2016-03-16 17:20

kingdev 閱讀(

...)

編輯收藏

Map遍歷效率比較

1 由來 上次部落格提到了map的四種遍歷方法,其中有的只是獲取了key值或者是value值,但我們應該在什麼時刻選擇什麼樣的遍歷方式呢,必須通過實踐的比較才能看到效率。也看了很多文章,大家建議使用entryset,認為entryset對於大資料量的查詢來說,速度更快,今天我們就通過下面採用不同方法...

Map遍歷效率比較

原博 1 由來 上次部落格提到了map的四種遍歷方法,其中有的只是獲取了key值或者是value值,但我們應該在什麼時刻選擇什麼樣的遍歷方式呢,必須通過實踐的比較才能看到效率。也看了很多文章,大家建議使用entryset,認為entryset對於大資料量的查詢來說,速度更快,今天我們就通過下面採用不...

各種解析xml方式的效率比較

方式 模型原理 說明1說明2 tree based api domjdom dom4j 把xml檔案讀入,變成dom模型的一棵樹,然後查詢獲取自己想要的東西 xml檔案很大時會占用很大記憶體。即速度慢,占用記憶體大 event based api push sax sax只能讀xml檔案。速度比do...