iOS - GCD 常用的一些東西

Grand Central Dispatch,也就是“最牛逼的中樞調(diào)度器”

容易混淆的術(shù)語
#    有4個(gè)術(shù)語比較容易混淆:同步、異步、并發(fā)、串行 #
    同步和異步主要影響:能不能開啟新的線程
    同步:只是在當(dāng)前線程中執(zhí)行任務(wù),不具備開啟新線程的能力
    異步:可以在新的線程中執(zhí)行任務(wù),具備開啟新線程的能力
并發(fā)和串行主要影響:任務(wù)的執(zhí)行方式
    并發(fā):允許多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行(并不是用來并發(fā)就能開線程,得要使用了異步線程)
    串行:一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù)
  • GCD中有2個(gè)核心,搞來搞去永遠(yuǎn)都是這兩個(gè)

    任務(wù):執(zhí)行什么操作
    隊(duì)列:用來存放任務(wù)
    
  • 將任務(wù)添加到隊(duì)列中

    GCD會(huì)自動(dòng)將隊(duì)列中的任務(wù)取出,放到對應(yīng)的線程中執(zhí)行
    任務(wù)的取出遵循隊(duì)列的FIFO原則:先進(jìn)先出,后進(jìn)后出
    它會(huì)自動(dòng)做操作,first in first out
    
    • GCD的隊(duì)列可以分為2大類型
      • 并發(fā)隊(duì)列(Concurrent Dispatch Queue)

        • 可以讓多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行(自動(dòng)開啟多個(gè)線程同時(shí)執(zhí)行任務(wù))
        • 并發(fā)功能只有在異步(dispatch_async)函數(shù)下才有效。他們要合作才可以
      • 串行隊(duì)列(Serial Dispatch Queue)

      • 讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行(一個(gè)任務(wù)執(zhí)行完畢后,再執(zhí)行下一個(gè)任務(wù))

  • GCD中還有個(gè)用來執(zhí)行任務(wù)的函數(shù):
  dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);
  • 在前面的任務(wù)執(zhí)行結(jié)束后它才執(zhí)行,而且它后面的任務(wù)等它執(zhí)行完成之后才會(huì)執(zhí)行
  • 這個(gè)queue不能是全局的并發(fā)隊(duì)列
  • 延時(shí)執(zhí)行
    iOS常見的延時(shí)執(zhí)行調(diào)用NSObject的方法
[self performSelector:@selector(run) withObject:nil afterDelay:2.0];// 2秒后再調(diào)用self的run方法

使用GCD函數(shù)

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒后執(zhí)行這里的代碼... // 默認(rèn)在主線程執(zhí)行,你也可以并發(fā),在子線程執(zhí)行});

使用NSTimer

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:NO];
  • 快速迭代
    使用dispatch_apply函數(shù)能進(jìn)行快速迭代遍歷
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index){ 
// 執(zhí)行10次代碼,index順序不確定 
// 和for循環(huán)不同,不是有序的 
// 它是同時(shí)并發(fā)遍歷,一起做事情,快速遍歷迭代 
// 比如剪切圖片的例子
});

突然發(fā)現(xiàn)這個(gè)帖子寫的比較好直接推薦收藏,認(rèn)真看里面有OC圖片合成 有OC文件剪切

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

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