一隧出、使用for循環(huán)
優(yōu)點:簡單
缺點:由于字典和集合內(nèi)部是無序的俱饿,導(dǎo)致我們在遍歷字典和集合的時候需要借助一個新的『數(shù)組』作為中介來處理糟港,多出了一部分開銷丧没。
二、使用NSEnumerator遍歷
優(yōu)點:對于不同的數(shù)據(jù)類型锡移,遍歷的語法相似;內(nèi)部可以簡單的通過reverseObjectEnumerator設(shè)置進(jìn)行反向遍歷
缺點:代碼量稍大漆际。
三淆珊、使用for...In遍歷
優(yōu)點:1)語法簡潔;2)效率沒有for循環(huán)效率高奸汇;
缺點:無法獲得當(dāng)前遍歷操作所針對的下標(biāo)施符。
四、基于Block的遍歷方式
優(yōu)點:
1)遍歷時可以直接從block中獲得需要的所有信息擂找,包括下標(biāo)戳吝、值等。特別相對于字典而言贯涎,不需要做多余的編碼即可同時獲得key和value的值听哭。
2)能夠直接修改block中key或者obj的類型為真實類型,可以省去類型轉(zhuǎn)換的工作塘雳。
3)可以通過NSEnumerationConcurrent枚舉值開啟并發(fā)迭代功能陆盘。
說明:基于Block的遍歷方式在實現(xiàn)反向遍歷的時候也非常簡單,使用enumerateObjectsWithOptions方法败明,傳遞NSEnumerationReverse作為參數(shù)即可隘马,在處理遍歷操作的時候推薦基于Block的遍歷方式。
五妻顶、使GCD中的dispatch_apply函數(shù)
使用GCD中的dispatch_apply函數(shù)也能實現(xiàn)字典酸员、數(shù)組等的遍歷,該函數(shù)比較適合處理耗時較長讳嘱、迭代次數(shù)較多的情況幔嗦。示例如下:
//使用GCD中的dispatch_apply函數(shù)
- (void)iteratorWithApply
{
//////////處理數(shù)組//////////
NSArray *arrayM = @[@"1",@"2",@"3",@"4"];
//獲得全局并發(fā)隊列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_apply(arrayM.count, queue, ^(size_t index) {
NSLog(@"%@--%@",arrayM[index],[NSThread currentThread]);
});
}
優(yōu)點:開啟多條線程并發(fā)處理遍歷任務(wù),執(zhí)行效率高沥潭。
缺點:1)對于字典和集合的處理需借助數(shù)組崭添;2)無法實現(xiàn)反向遍歷。