GCD的四種情況詳解

- (void)cast1{

//1.用異步函數(shù),往全局并發(fā)隊(duì)列添加任務(wù)狈醉。異步并發(fā)開(kāi)辟新線程同時(shí)運(yùn)行

//參數(shù):1.優(yōu)先級(jí)<#long identifier#> ?2.為將來(lái)做準(zhǔn)備,通常設(shè)為0<#unsigned long flags#>

//串行:dispatch_queue_create("1234567", NULL);

//獲取全局并發(fā)隊(duì)列

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);//并發(fā)

//異步

//把右邊的操作(block)交個(gè)左邊的隊(duì)列(queue)

dispatch_async(queue, ^{

//添加任務(wù)

NSLog(@"下載1---- %@",[NSThreadcurrentThread]);

});

dispatch_async(queue, ^{

//添加任務(wù)

NSLog(@"下載2---- %@",[NSThreadcurrentThread]);

});

dispatch_async(queue, ^{

//添加任務(wù)

NSLog(@"下載3---- %@",[NSThreadcurrentThread]);

});dispatch_async(queue, ^{

//添加任務(wù)

NSLog(@"下載4---- %@",[NSThreadcurrentThread]);

});

NSLog(@"當(dāng)前線程---- %@",[NSThreadcurrentThread]);

//總結(jié):異步函數(shù)具有開(kāi)啟線程的能力----異步并發(fā)執(zhí)行四個(gè)操作(開(kāi)啟了四個(gè)分線程)

}

- (void)cast7 {

//異步并發(fā)

dispatch_queue_t queue? = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue, ^{

NSURL* url = [NSURLURLWithString:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1467792967&di=399aeff71e6bc005a6439e77e7dad2af&src=http://www.gzmingjin.com.cn/uploadfile/2015/11455153127/23264481380.jpg"];

NSData* data = [NSDatadataWithContentsOfURL:url];

// ???????NSLog(@"---- %@",data);

__blockUIImage* image = [UIImageimageWithData:data];

NSLog(@"----%@",[NSThreadcurrentThread]);

//回到主線程刷新UI

// ??????1. [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

// ??????2. [self.image1 performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];

// ??????3. [self performSelector:@selector(settingImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

// ??????4. [self.image1 performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

//回到主線程刷新UI

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"currentThread ---- %@",[NSThreadcurrentThread]);

self.image1.image= image;

});

//優(yōu)點(diǎn):分線程中得到的數(shù)據(jù),可以直接使用,不需要傳值,更加方便和直接

});

}

- (void)settingImage:(UIImage *)image{

self.image1.image= image;

}

- (void)cast8{

//異步并發(fā)

dispatch_async(GLOBAL_QUEUE, ^{

__block UIImage* mage1 = [selfimageWithURL:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1467792967&di=399aeff71e6bc005a6439e77e7dad2af&src=http://www.gzmingjin.com.cn/uploadfile/2015/11455153127/23264481380.jpg"];

__block UIImage* mage2 = [selfimageWithURL:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1467792967&di=399aeff71e6bc005a6439e77e7dad2af&src=http://www.gzmingjin.com.cn/uploadfile/2015/11455153127/23264481380.jpg"];

//在主線程刷新UI ?dispatch_get_main_queue

dispatch_async(dispatch_get_main_queue(), ^{

self.image1.image= mage1;

self.image2.image= mage2;

//合成圖片

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100),NO, 0.0);

[mage1drawInRect:CGRectMake(0, 0, 100, 100)];

[mage2drawInRect:CGRectMake(100, 0, 100, 100)];

self.image3.image=UIGraphicsGetImageFromCurrentImageContext();

//關(guān)閉上下文

UIGraphicsEndImageContext();

NSLog(@"currentThread -- %@",[NSThreadcurrentThread]);

});

NSLog(@"111currentThread -- %@",[NSThreadcurrentThread]);

});

}

- (UIImage*)imageWithURL:(NSString*)URLStr{

NSURL* url = [NSURLURLWithString:URLStr];

NSData* data = [NSDatadataWithContentsOfURL:url];

UIImage* image = [UIImageimageWithData:data];

return image;

}

- (void)cast2{

//2.用同步函數(shù)往全局并發(fā)隊(duì)列中添加任務(wù)同步并發(fā)在同一個(gè)線程中同時(shí)運(yùn)行

//獲取全局并發(fā)隊(duì)列

//總結(jié):用同步函數(shù)往全局并發(fā)隊(duì)列中添加任務(wù),由于同步函數(shù)不具有開(kāi)辟線程的能力,所以我們的操作在當(dāng)前線程串行執(zhí)行

}

- (void)cast3{

//3.用同步函數(shù)往串行隊(duì)列中添加任務(wù)同步串行在同一個(gè)線程中一個(gè)一個(gè)運(yùn)行任務(wù)

//獲取全局串行隊(duì)列

//1.隊(duì)列的名字(方便測(cè)試) ?2.隊(duì)列的屬性,一般為NULL

dispatch_queue_t queue =dispatch_queue_create("123456",NULL);

dispatch_sync(queue, ^{

NSLog(@"下載1---- %@",[NSThreadcurrentThread]);

});

//在當(dāng)前線程中串行執(zhí)行

}

- (void)cast4 {

//常用

//4.用異步函數(shù)往串行隊(duì)中添加任務(wù)異步串行開(kāi)辟另一條線程一個(gè)一個(gè)運(yùn)行任務(wù)(只另外開(kāi)辟一條)

// CONCURRENT并發(fā)DISPATCH_QUEUE_SERIAL串行

//總結(jié)

}

- (void)cast9 {

//異步串行

//同時(shí)執(zhí)行下載兩張圖片

//隊(duì)列組

//創(chuàng)建一個(gè)隊(duì)列組

dispatch_group_tgroup =dispatch_group_create();

__blockUIImage* im1 =nil;

//將block(操作)添加到全局并發(fā)隊(duì)列中,然后全局并發(fā)隊(duì)列添加到隊(duì)列組中

dispatch_group_async(group,GLOBAL_QUEUE, ^{

im1 = [selfimageWithURL:@"http://p3.pstatp.com/large/9e00004286008bddc3c"];

NSLog(@"currentThread --- %@",[NSThreadcurrentThread]);

});

__blockUIImage* im2 =nil;

//將block(操作)添加到全局并發(fā)隊(duì)列中,然后全局并發(fā)隊(duì)列添加到隊(duì)列組中

dispatch_group_async(group,GLOBAL_QUEUE, ^{

im2 = [selfimageWithURL:@"https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1467792967&di=399aeff71e6bc005a6439e77e7dad2af&src=http://www.gzmingjin.com.cn/uploadfile/2015/11455153127/23264481380.jpg"];

NSLog(@"currentThread --- %@",[NSThreadcurrentThread]);

});

//隊(duì)列組中的所有操作執(zhí)行完調(diào)用該方法---回到主線程刷新UI

dispatch_group_notify(group,dispatch_get_main_queue(), ^{

self.image1.image= im1;

self.image2.image= im2;

//合成圖片

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100),NO, 0.0);

[im1drawInRect:CGRectMake(0, 0, 100, 100)];

[im2drawInRect:CGRectMake(100, 0, 100, 100)];

self.image3.image=UIGraphicsGetImageFromCurrentImageContext();

//關(guān)閉上下文

UIGraphicsEndImageContext();

NSLog(@"currentThread -- %@",[NSThreadcurrentThread]);

});

}

- (void)cast5 {

//5.用異步函數(shù)往主隊(duì)列中添加任務(wù)主隊(duì)列異步串行

//獲取主隊(duì)列

dispatch_queue_tqueue =dispatch_get_main_queue();

dispatch_async(queue, ^{

NSLog(@"下載1---- %@",[NSThreadcurrentThread]);

});

//總結(jié):放在主隊(duì)列中的任務(wù),都在主線程中串行執(zhí)行分線程管回調(diào)

}

- (void)cast6{

//6.在主線程中用同步函數(shù)往主隊(duì)列中添加任務(wù)主隊(duì)列同步

//卡死無(wú)輸出

//獲取主隊(duì)列

dispatch_queue_t queue =dispatch_get_main_queue();

dispatch_sync(queue, ^{

NSLog(@"下載1---- %@",[NSThreadcurrentThread]);

});

//總結(jié):在主線程中用同步函數(shù)往主隊(duì)列中添加任務(wù)會(huì)造成主線程死鎖下面的代碼不會(huì)執(zhí)行

}

//在分線程中用同步函數(shù)往主隊(duì)列中添加任務(wù)---不會(huì)造成死鎖

[self performSelectorInBackground:@selector(cast6) withObject:nil];

- (void)cast10 {

//延遲函數(shù)

//1.NSObjiect的延遲方法

NSLog(@"111111.currentThread --- %@",[NSThreadcurrentThread]);

[selfperformSelector:@selector(run)withObject:nilafterDelay:2.0];

//2.GCD

//什么時(shí)間在哪個(gè)隊(duì)列中執(zhí)行什么方法

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 *NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

NSLog(@"1.currentThread --- %@",[NSThreadcurrentThread]);

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 *NSEC_PER_SEC)),dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSLog(@"3.currentThread --- %@",[NSThreadcurrentThread]);

});

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0 *NSEC_PER_SEC)),dispatch_queue_create("123",NULL), ^{

NSLog(@"2.currentThread --- %@",[NSThreadcurrentThread]);

});

}

- (void)run {

NSLog(@"0.currentThread --- %@",[NSThreadcurrentThread]);

}

- (void)cast11{

//dispatch_once函數(shù)中的操作只執(zhí)行一次單列類

for(inti = 0; i < 20;i ++) {

__block int count = 0;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

count ++;

NSLog(@"我執(zhí)行了%d次",count);

});

}

}

宏定義方式

//1.GLOBAL_QUEUE

//2.kPrivate_Global_Queue

//3.kGlobal_Queue

#define GLOBAL_QUEUE ?dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

#define kAfteTime(x) (int64_t) (x * NSEC_PER_SEC)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屁桑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绰姻,老刑警劉巖家肯,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帽氓,死亡現(xiàn)場(chǎng)離奇詭異楷拳,居然都是意外死亡绣夺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門欢揖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陶耍,“玉大人,你說(shuō)我怎么就攤上這事她混×页” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵坤按,是天一觀的道長(zhǎng)毯欣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)晋涣,這世上最難降的妖魔是什么仪媒? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮谢鹊,結(jié)果婚禮上算吩,老公的妹妹穿的比我還像新娘。我一直安慰自己佃扼,他們只是感情好偎巢,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著兼耀,像睡著了一般压昼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘤运,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天窍霞,我揣著相機(jī)與錄音,去河邊找鬼拯坟。 笑死但金,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郁季。 我是一名探鬼主播冷溃,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梦裂!你這毒婦竟也來(lái)了似枕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤年柠,失蹤者是張志新(化名)和其女友劉穎凿歼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毅往,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年牵咙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了派近。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀唯。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渴丸,靈堂內(nèi)的尸體忽然破棺而出侯嘀,到底是詐尸還是另有隱情,我是刑警寧澤谱轨,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布戒幔,位于F島的核電站,受9級(jí)特大地震影響土童,放射性物質(zhì)發(fā)生泄漏诗茎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一献汗、第九天 我趴在偏房一處隱蔽的房頂上張望敢订。 院中可真熱鬧,春花似錦罢吃、人聲如沸楚午。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矾柜。三九已至,卻和暖如春就谜,著一層夾襖步出監(jiān)牢的瞬間怪蔑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工丧荐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缆瓣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓篮奄,卻偏偏與公主長(zhǎng)得像捆愁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窟却,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...
    冬的天閱讀 2,286評(píng)論 0 12
  • 歡迎大家指出文章中需要改正或者需要補(bǔ)充的地方,我會(huì)及時(shí)更新握础,非常感謝辐董。 一. 多線程基礎(chǔ) 1. 進(jìn)程 進(jìn)程是指在系...
    xx_cc閱讀 7,198評(píng)論 11 70
  • 3.GCD GCD的全稱是Grand Central Dispatch,提供了非常多的純C語(yǔ)言的函數(shù) GCD的優(yōu)勢(shì)...
    Mario_ZJ閱讀 487評(píng)論 0 0
  • 大到老人,小到孩子禀综,火車飛機(jī)简烘,到處都是抱著手機(jī)看《人民名義》的人群。出于好奇定枷,我也放下多年未看連續(xù)劇的習(xí)慣孤澎,一旦開(kāi)...
    秋子123閱讀 323評(píng)論 0 1
  • 說(shuō)起界面設(shè)計(jì)里對(duì)扁平設(shè)計(jì)覆旭,主流感受都是正面的,似乎很少有人提出它有什么問(wèn)題岖妄。扁平風(fēng)格在這個(gè)簡(jiǎn)約至上時(shí)代體現(xiàn)了符合潮...
    Z_Yuhan閱讀 1,826評(píng)論 2 28