看了一篇部落格,挺有意思,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 }
控制台輸出:
12016-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 }
控制台輸出:
12016-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 }
控制台輸出:
12016-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 }
控制台輸出:
12016-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...