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

說明:

1)該文簡短介紹在iOS開發(fā)中遍歷字典、數(shù)組和集合的幾種常見方式。

2)該文對應(yīng)的代碼可以在下面的地址獲得:https://github.com/HanGangAndHanMeimei/Code

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

要遍歷字典、數(shù)組或者是集合,for循環(huán)是最簡單也用的比較多的方法,示例如下:


優(yōu)點:簡單

缺點:由于字典和集合內(nèi)部是無序的,導(dǎo)致我們在遍歷字典和集合的時候需要借助一個新的『數(shù)組』作為中介來處理,多出了一部分開銷。

二、使用NSEnumerator遍歷

NSEnumerator的使用和基本的for循環(huán)類似,不過代碼量要大一些。示例如下:


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

缺點:代碼量稍大。

三、使用for...In遍歷

在Objective-C 2.0 中增加了for ...In 形式的快速遍歷。此種遍歷方式語法簡潔,速度飛快。示例如下:


優(yōu)點:1)語法簡潔;2)效率最高;

缺點:無法獲得當(dāng)前遍歷操作所針對的下標(biāo)。

四、基于Block的遍歷方式

基于Block的方式來進行遍歷是最新引入的方法。它提供了遍歷數(shù)組|字典等類型數(shù)據(jù)的最佳實踐。示例如下:


優(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ù)較多的情況。示例如下:


優(yōu)點:開啟多條線程并發(fā)處理遍歷任務(wù),執(zhí)行效率高。

缺點:1)對于字典和集合的處理需借助數(shù)組;2)無法實現(xiàn)反向遍歷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容