03-GCD

1.1 GCD的核心思想 : 將任務(wù)添加到隊(duì)列

1.2 GCD的使用步驟 :

        創(chuàng)建隊(duì)列 :
        dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

        創(chuàng)建任務(wù) :
        void(^task)() = ^{
            NSLog(@"hello %@",[NSThread currentThread]);
        };

        將任務(wù)添加到隊(duì)列 :
        dispatch_async(queue, task);

1.3 簡寫

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSLog(@"GCDDemo3 %@",[NSThread currentThread]);
    });

1.4 GCD的線程間的通信 (需要完全掌握)

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        NSLog(@"假裝在努力下載... %@",[NSThread currentThread]);
        
        // 下載結(jié)束之后,通知主線程刷新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"假裝在刷新UI... %@",[NSThread currentThread]);
        });
    });

2.隊(duì)列和任務(wù)

  • 串行隊(duì)列 : 里面無論放什么任務(wù)(同/異步任務(wù)),一定是有序執(zhí)行,先進(jìn)先出;
// 參數(shù)1 : 隊(duì)列的標(biāo)示符
// 參數(shù)2 : 隊(duì)列的屬性.決定了隊(duì)列是串行的還是并行的.
dispatch_queue_t queue = dispatch_queue_create("zj", DISPATCH_QUEUE_SERIAL);
  • 并發(fā)隊(duì)列 : "可以"同時調(diào)度多個任務(wù)同時執(zhí)行(任務(wù)必須是異步任務(wù))
// 參數(shù)1 : 隊(duì)列的標(biāo)示符
// 參數(shù)2 : 隊(duì)列的屬性.決定了隊(duì)列是串行的還是并行的.
dispatch_queue_t queue = dispatch_queue_create("zj", DISPATCH_QUEUE_CONCURRENT);
  • 同步任務(wù) : 不開新的線程,只在當(dāng)前線程執(zhí)行(如果當(dāng)前線程是子線程,同步任務(wù)就會在當(dāng)前的子線程執(zhí)行)
dispatch_sync(queue, ^{
         NSLog(@"%d %@",i,[NSThread currentThread]);
     });
  • 異步任務(wù) : 會新開執(zhí)行
 dispatch_async(queue, ^{
            NSLog(@"%d %@",i,[NSThread currentThread]);
        });

GCD隊(duì)列和任務(wù)組合總結(jié)

  • 同步和異步?jīng)Q定了要不要開啟新的線程 (同步不開,異步開)

  • 同步:在當(dāng)前線程中執(zhí)行任務(wù),不具備開啟新線程的能力

  • 異步:在新的線程中執(zhí)行任務(wù)家厌,具備開啟新線程的能力

  • 串行和并發(fā)決定了任務(wù)的執(zhí)行方式

  • 串行:一個任務(wù)執(zhí)行完畢后播玖,再執(zhí)行下一個任務(wù)

  • 并發(fā):多個任務(wù)并發(fā)(同時)執(zhí)行

  • 當(dāng)任務(wù)是異步的時候,隊(duì)列決定了開啟多少條線程

  • 串行隊(duì)列 : 只開一條

  • 并發(fā)隊(duì)列 : 可以開啟多條

3.主隊(duì)列

  • 專門用來在主線程上調(diào)度任務(wù)的隊(duì)列.
  • 不會開啟新線程.
  • 以先進(jìn)先出的方式,在主線程空閑時才會調(diào)度隊(duì)列中的任務(wù)在主線程執(zhí)行.
  • 如果當(dāng)前主線程正在有任務(wù)執(zhí)行,那么無論主隊(duì)列中當(dāng)前被添加了什么任務(wù),都不會被調(diào)度.
dispatch_queue_t queue = dispatch_get_main_queue();
  • 1.程序一啟動就會自動創(chuàng)建主隊(duì)列,所以只需要get,不需要create
  • 2.主隊(duì)列是特殊的串行隊(duì)列,主隊(duì)列里面無論是什么任務(wù)都是有序執(zhí)行的
  • 3.主隊(duì)列是專門在主線程上調(diào)度任務(wù)執(zhí)行的;主隊(duì)列里面的任務(wù)一定是在主線程執(zhí)行的
  • 4.小結(jié) : 主隊(duì)列里面無論添加什么任務(wù),都是在主線程有序執(zhí)行的
  • 5.提示 : 主隊(duì)列是主隊(duì)列.主線程是主線程
  • 6.注意 : 隊(duì)列和線程的關(guān)系,隊(duì)列是調(diào)度任務(wù)的,線程是執(zhí)行任務(wù)的,現(xiàn)有調(diào)度,后有執(zhí)行
  • 7.主隊(duì)列調(diào)度任務(wù)執(zhí)行,必須滿足一個條件,就是只有主線程空閑時,主隊(duì)列才會調(diào)度任務(wù)在主線程執(zhí)
  • 8.主隊(duì)列里面必須添加異步任務(wù)

4.全局隊(duì)列

程序一啟動會默認(rèn)創(chuàng)建一個全局隊(duì)列,它的本質(zhì)是并行隊(duì)列;蘋果為了方便程序員快速的是任務(wù)異步執(zhí)行而準(zhǔn)備的

 // 全局隊(duì)列,跟主隊(duì)列一樣不需要創(chuàng)建
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

*  參數(shù)1 : 隊(duì)列的優(yōu)先級 / 隊(duì)列的服務(wù)器質(zhì)量;傳入0,是為了適配iOS7.0和8.0及以后,也是設(shè)置成默認(rèn)的
*  參數(shù)2 : 留著以后使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饭于,隨后出現(xiàn)的幾起案子蜀踏,更是在濱河造成了極大的恐慌,老刑警劉巖掰吕,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件果覆,死亡現(xiàn)場離奇詭異,居然都是意外死亡殖熟,警方通過查閱死者的電腦和手機(jī)局待,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人钳榨,你說我怎么就攤上這事舰罚。” “怎么了薛耻?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵营罢,是天一觀的道長。 經(jīng)常有香客問我饼齿,道長愤钾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任候醒,我火速辦了婚禮能颁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倒淫。我一直安慰自己伙菊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布敌土。 她就那樣靜靜地躺著镜硕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪返干。 梳的紋絲不亂的頭發(fā)上兴枯,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音矩欠,去河邊找鬼财剖。 笑死,一個胖子當(dāng)著我的面吹牛癌淮,可吹牛的內(nèi)容都是我干的躺坟。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼乳蓄,長吁一口氣:“原來是場噩夢啊……” “哼咪橙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虚倒,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤美侦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后魂奥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菠剩,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年捧弃,在試婚紗的時候發(fā)現(xiàn)自己被綠了赠叼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擦囊。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡违霞,死狀恐怖嘴办,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情买鸽,我是刑警寧澤涧郊,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站眼五,受9級特大地震影響妆艘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜看幼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一批旺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诵姜,春花似錦汽煮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宵凌,卻和暖如春鞋囊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞎惫。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工溜腐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓜喇。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓逗扒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欠橘。 傳聞我的和親對象是個殘疾皇子矩肩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

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