天天看點

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

說明:

  1)該文簡短介紹在ios開發中周遊字典、數組和集合的幾種常見方式。

  2)該文對應的代碼可以在下面的位址獲得:https://github.com/hangangandhanmeimei/code

一、使用for循環

  要周遊字典、數組或者是集合,for循環是最簡單也用的比較多的方法,示例如下: 

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式
iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

優點:簡單

缺點:由于字典和集合内部是無序的,導緻我們在周遊字典和集合的時候需要借助一個新的『數組』作為中介來處理,多出了一部分開銷。

二、使用nsenumerator周遊

nsenumerator的使用和基本的for循環類似,不過代碼量要大一些。示例如下:

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式
iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

優點:對于不同的資料類型,周遊的文法相似;内部可以簡單的通過reverseobjectenumerator設定進行反向周遊。

缺點:代碼量稍大。

三、使用for...in周遊

在objective-c 2.0 中增加了for ...in 形式的快速周遊。此種周遊方式文法簡潔,速度飛快。示例如下:

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式
iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

優點:1)文法簡潔;2)效率最高;

缺點:無法獲得目前周遊操作所針對的下标。

四、基于block的周遊方式

基于block的方式來進行周遊是最新引入的方法。它提供了周遊數組|字典等類型資料的最佳實踐。示例如下:

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式
iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

優點:1)周遊時可以直接從block中獲得需要的所有資訊,包括下标、值等。特别相對于字典而言,不需要做多餘的編碼即可同時獲得key和value的值。

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

   3)可以通過nsenumerationconcurrent枚舉值開啟并發疊代功能。

說明:基于block的周遊方式在實作反向周遊的時候也非常簡單,使用enumerateobjectswithoptions方法,傳遞nsenumerationreverse作為參數即可,在處理周遊操作的時候推薦基于block的周遊方式。

五、使gcd中的dispatch_apply函數

  使用gcd中的dispatch_apply函數也能實作字典、數組等的周遊,該函數比較适合處理耗時較長、疊代次數較多的情況。示例如下:

iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式
iOS開發實用技巧—Objective-C中的各種周遊(疊代)方式

優點:開啟多條線程并發處理周遊任務,執行效率高。

缺點:1)對于字典和集合的處理需借助數組;2)無法實作反向周遊。

繼續閱讀