iOS開發(fā)GCD遍歷(迭代)和For循環(huán)分析

『導(dǎo)言』

iOS開發(fā)中經(jīng)常用到遍歷數(shù)據(jù)用到for循環(huán),其實(shí)GCD中有個(gè)更好用的方法來快速迭代,下面我們來看看兩者的區(qū)別和聯(lián)系。

一、代碼分析(用遍歷0到9的10個(gè)數(shù)字為例):
  • for循環(huán):
  • 遍歷10個(gè)數(shù)字
    for (int i = 0; i<10; i++) {
        NSLog(@"i  = %d,線程 = %@",i,[NSThread currentThread]);
    }
    ```
 * 結(jié)果打印
 2017-02-16 14:58:01.070 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 0,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.071 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 1,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.071 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 2,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.071 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 3,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.071 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 4,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.071 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 5,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.072 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 6,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.072 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 7,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.072 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 8,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 2017-02-16 14:58:01.072 02-掌握-GCD的快速迭代-zwj[1420:97101] i  = 9,線程 = <NSThread: 0x6080000654c0>{number = 1, name = main}
 * 結(jié)果分析
結(jié)果:number= 1,始終只在主線程執(zhí)行,如果,遍歷數(shù)據(jù)很多的話,項(xiàng)目運(yùn)行肯定會(huì)卡。
* GCD循環(huán):
 * GCD遍歷代碼`dispatch_apply`

/**
@param iterations#> 遍歷的次數(shù),相當(dāng)于i=10 description#>
@param queue#> 隊(duì)列(必須為并發(fā)隊(duì)列,串行隊(duì)列無意義;也不能傳主隊(duì)列,因?yàn)樗梨i) description#>dispatch_get_global_queue
@param size_t <#size_t description#>
@return 索引index 相當(dāng)于i為0到9
*/
// dispatch_apply(<#size_t iterations#>, <#dispatch_queue_t _Nonnull queue#>, <#^(size_t)block#>)

dispatch_apply(10,dispatch_get_global_queue(0, 0), ^(size_t index) {
    NSLog(@"%zd = %@",index,[NSThread currentThread]);
});

 * 打印結(jié)果

2017-02-16 15:10:38.602 02-掌握-GCD的快速迭代-zwj[1447:102911] 3 = <NSThread: 0x608000268e40>{number = 5, name = (null)}
2017-02-16 15:10:38.602 02-掌握-GCD的快速迭代-zwj[1447:102666] 0 = <NSThread: 0x60000007ee80>{number = 1, name = main}
2017-02-16 15:10:38.602 02-掌握-GCD的快速迭代-zwj[1447:102912] 2 = <NSThread: 0x60000026ca00>{number = 4, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102910] 1 = <NSThread: 0x60800007eac0>{number = 3, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102911] 4 = <NSThread: 0x608000268e40>{number = 5, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102666] 5 = <NSThread: 0x60000007ee80>{number = 1, name = main}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102912] 6 = <NSThread: 0x60000026ca00>{number = 4, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102910] 7 = <NSThread: 0x60800007eac0>{number = 3, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102911] 8 = <NSThread: 0x608000268e40>{number = 5, name = (null)}
2017-02-16 15:10:38.603 02-掌握-GCD的快速迭代-zwj[1447:102666] 9 = <NSThread: 0x60000007ee80>{number = 1, name = main}

 * 結(jié)果分析
 1. index(相當(dāng)于for循環(huán)的i)遍歷10次。打印線程的number 為1.3.4.5,其中1表示主線程,非1得為子線程,即開啟了主線程和子線程來執(zhí)行任務(wù)。
 2.GCD的遍歷為:異步函數(shù)&并發(fā)隊(duì)列,必須為并發(fā)隊(duì)列,串行隊(duì)列無意義;也不能傳主隊(duì)列,因?yàn)樗梨i.
 3.快的原因(異步的并發(fā)的隊(duì)列,自動(dòng)開啟子線程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. GCD簡介 什么是GCD呢?我們先來看看百度百科的解釋簡單了解下概念 引自百度百科:Grand Centra...
    千尋_544f閱讀 412評(píng)論 0 0
  • 不緊張!把平時(shí)訓(xùn)練水平發(fā)揮出來就好! 就兩把機(jī)會(huì),好好把握! 我往17號(hào)考試車跑時(shí),還給自...
    冬陽一縷閱讀 312評(píng)論 0 0
  • 前段時(shí)間和媽媽聊天,發(fā)現(xiàn)小的時(shí)候的自己,還真是一個(gè)不折不扣的闖禍大王。 一個(gè)好奇心,就把家里的廚房給燒了,通天火光...
    簡糯閱讀 578評(píng)論 6 10
  • 不需要任何代碼,即可添加占位圖(只針對(duì)section=1的情況下) 1,為tableView添加類別; 直接為ta...
    WSKing的雜貨鋪閱讀 307評(píng)論 1 1