iOS開發(fā)實(shí)用技巧—Objective-C中的各種遍歷(迭代)方式

一、使用for循環(huán)

優(yōu)點(diǎn):簡單
缺點(diǎn):由于字典和集合內(nèi)部是無序的,導(dǎo)致我們?cè)诒闅v字典和集合的時(shí)候需要借助一個(gè)新的『數(shù)組』作為中介來處理,多出了一部分開銷。

二、使用NSEnumerator遍歷

優(yōu)點(diǎn):對(duì)于不同的數(shù)據(jù)類型,遍歷的語法相似;內(nèi)部可以簡單的通過reverseObjectEnumerator設(shè)置進(jìn)行反向遍歷
缺點(diǎn):代碼量稍大。

三、使用for...In遍歷

優(yōu)點(diǎn):1)語法簡潔;2)效率沒有for循環(huán)效率高;
缺點(diǎn):無法獲得當(dāng)前遍歷操作所針對(duì)的下標(biāo)。

四、基于Block的遍歷方式

優(yōu)點(diǎn):
1)遍歷時(shí)可以直接從block中獲得需要的所有信息,包括下標(biāo)、值等。特別相對(duì)于字典而言,不需要做多余的編碼即可同時(shí)獲得key和value的值。

2)能夠直接修改block中key或者obj的類型為真實(shí)類型,可以省去類型轉(zhuǎn)換的工作。

3)可以通過NSEnumerationConcurrent枚舉值開啟并發(fā)迭代功能。

說明:基于Block的遍歷方式在實(shí)現(xiàn)反向遍歷的時(shí)候也非常簡單,使用enumerateObjectsWithOptions方法,傳遞NSEnumerationReverse作為參數(shù)即可,在處理遍歷操作的時(shí)候推薦基于Block的遍歷方式。

五、使GCD中的dispatch_apply函數(shù)

使用GCD中的dispatch_apply函數(shù)也能實(shí)現(xiàn)字典、數(shù)組等的遍歷,該函數(shù)比較適合處理耗時(shí)較長、迭代次數(shù)較多的情況。示例如下:

 //使用GCD中的dispatch_apply函數(shù)
- (void)iteratorWithApply
 {
    //////////處理數(shù)組//////////
    NSArray *arrayM = @[@"1",@"2",@"3",@"4"];

     //獲得全局并發(fā)隊(duì)列
    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)點(diǎn):開啟多條線程并發(fā)處理遍歷任務(wù),執(zhí)行效率高。
缺點(diǎn):1)對(duì)于字典和集合的處理需借助數(shù)組;2)無法實(shí)現(xiàn)反向遍歷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容