GCD多線程

網(wǎng)址:http://www.cnblogs.com/jy578154186/archive/2012/12/15/2819420.html

如何使用GCD?

GCD為Grand Central Dispatch的縮寫鸦泳〗缶冢  Grand Central Dispatch (GCD)是Apple開發(fā)的一個(gè)多核編程的較新的解決方法类咧。在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0芍碧。  GCD是一個(gè)替代諸如NSThread等技術(shù)的很高效和強(qiáng)大的技術(shù)号俐。GCD完全可以處理諸如數(shù)據(jù)鎖定和資源泄漏等復(fù)雜的異步編程問題泌豆。  GCD可以完成很多事情吏饿,但是這里僅關(guān)注在iOS應(yīng)用中實(shí)現(xiàn)多線程所需的一些基礎(chǔ)知識(shí)踪危。  在開始之前找岖,需要理解是要提供給GCD隊(duì)列的是代碼塊陨倡,用于在系統(tǒng)或者用戶創(chuàng)建的的隊(duì)列上調(diào)度運(yùn)行⌒聿迹  聲明一個(gè)隊(duì)列   如下會(huì)返回一個(gè)用戶創(chuàng)建的隊(duì)列:  dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);其中兴革,第一個(gè)參數(shù)是標(biāo)識(shí)隊(duì)列的,第二個(gè)參數(shù)是用來定義隊(duì)列的參數(shù)(目前不支持,因此傳入NULL)杂曲∈ 執(zhí)行一個(gè)隊(duì)列   如下會(huì)異步執(zhí)行傳入的代碼:  dispatch_async(myQueue, ^{ [self doSomething]; });其中,首先傳入之前創(chuàng)建的隊(duì)列擎勘,然后提供由隊(duì)列運(yùn)行的代碼塊咱揍。  聲明并執(zhí)行一個(gè)隊(duì)列   如果不需要保留要運(yùn)行的隊(duì)列的引用棚饵,可以通過如下代碼實(shí)現(xiàn)之前的功能:  dispatch_async(dispatch_queue_create ("com.iphonedevblog.post", NULL), ^{ [self doSomething]; });  如果需要暫停一個(gè)隊(duì)列煤裙,可以調(diào)用如下代碼。暫停一個(gè)隊(duì)列會(huì)阻止和該隊(duì)列相關(guān)的所有代碼運(yùn)行噪漾∨鹋椋  dispatch_suspend(myQueue);暫停一個(gè)隊(duì)列  如果暫停一個(gè)隊(duì)列不要忘記恢復(fù)。暫停和恢復(fù)的操作和內(nèi)存管理中的retain和release類似欣硼。調(diào)用dispatch_suspend會(huì)增加暫停計(jì)數(shù)题翰,而dispatch_resume則會(huì)減少。隊(duì)列只有在暫停計(jì)數(shù)變成零的情況下才開始運(yùn)行诈胜。dispatch_resume(myQueue);恢復(fù)一個(gè)隊(duì)列    從隊(duì)列中在主線程運(yùn)行代碼   有些操作無法在異步隊(duì)列運(yùn)行豹障,因此必須在主線程(每個(gè)應(yīng)用都有一個(gè))上運(yùn)行。UI繪圖以及任何對(duì)NSNotificationCenter的調(diào)用必須在主線程長進(jìn)行焦匈。在另一個(gè)隊(duì)列中訪問主線程并運(yùn)行代碼的示例如下:  dispatch_sync(dispatch_get_main_queue(), ^{ [self dismissLoginWindow]; });注意血公,dispatch_suspend (以及dispatch_resume)在主線程上不起作用。使用GCD括授,可以讓你的程序不會(huì)失去響應(yīng). 多線程不容易使用坞笙,用了GCD,會(huì)讓它變得簡單荚虚。你無需專門進(jìn)行線程管理, 很棒薛夜!讓你的程序保持響應(yīng)的原則:1. 不要柱塞主線程 2. 把工作一到其他線程中做。3. 做完后更新主線程的UI.舉例說明:沒有GCD的代碼:- (void)addTweetWithMsg:(NSString*)msg url:(NSURL*)url {? // 在主線程調(diào)用版述。? DTweet *tw = [[DTweet alloc] initWithMsg:msg];? [tweets addTweet:tw display:YES];? tw.img = [imageCache getImgFromURL:url];//bottle neck? [tweets updateTweet:tw display:YES];? [tw release];}有GCD的代碼:- (void)addTweetWithMsg:(NSString*)msg url:(NSURL*)url {//在主線程調(diào)用梯澜。? DTweet *tw = [[DTweet alloc] initWithMsg:msg];? [tweets addTweet:tw display:YES];? dispatch_async(image_queue, ^{? ? tw.img = [imageCache getImgFromURL:url];//放到一個(gè)異步隊(duì)列里。? ? dispatch_async(main_queue, ^{? ? ? [tweets updateTweet:tw display:YES];//放到異步的主線程里渴析。? ? });? });? [tw release];} 1. GCD is part of libSystem.dylib2. #include

一》

NSThread的方法:代碼如下:

- (void)viewDidLoad

{

[super viewDidLoad];

NSThread *thread1=[[NSThread alloc]initWithTarget:self selector:@selector(print1) object:nil];

[thread1 start];

NSThread *thread2=[[NSThread alloc]initWithTarget:self selector:@selector(print2) object:nil];

[thread2 start];

}

-(void)print1{

for (int i=0; i<100; i++) {

NSLog(@"我是print1正在執(zhí)行%d",i);

}

}

-(void)print2{

for (int i=0; i<100; i++) {

NSLog(@"print2正在執(zhí)行%d",i);

}

}

二》

NSInvocationOperation

的方法:代碼如下

//? ? NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(print1) object:@"1"];

//? ? NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(print2) object:@"2"];//當(dāng)然這里可以用一個(gè)方法晚伙。

//? ? NSOperationQueue *queue=[[NSOperationQueue alloc]init];

//? ? [queue addOperation:operation1];

//? ? [queue addOperation:operation2];

三》

GCD

的方法:代碼如下

dispatch_queue_t t1=dispatch_queue_create("1", NULL);

dispatch_queue_t t2=dispatch_queue_create("2", NULL);

dispatch_async(t1, ^{

[self print1];

});

dispatch_async(t2, ^{

[self print2];

});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俭茧,隨后出現(xiàn)的幾起案子咆疗,更是在濱河造成了極大的恐慌,老刑警劉巖母债,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件午磁,死亡現(xiàn)場離奇詭異尝抖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)迅皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門昧辽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人登颓,你說我怎么就攤上這事搅荞。” “怎么了框咙?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵咕痛,是天一觀的道長。 經(jīng)常有香客問我喇嘱,道長暇检,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任婉称,我火速辦了婚禮,結(jié)果婚禮上构蹬,老公的妹妹穿的比我還像新娘王暗。我一直安慰自己,他們只是感情好庄敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布俗壹。 她就那樣靜靜地躺著,像睡著了一般藻烤。 火紅的嫁衣襯著肌膚如雪绷雏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天怖亭,我揣著相機(jī)與錄音涎显,去河邊找鬼。 笑死兴猩,一個(gè)胖子當(dāng)著我的面吹牛期吓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倾芝,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讨勤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晨另?” 一聲冷哼從身側(cè)響起潭千,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎借尿,沒想到半個(gè)月后刨晴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年割捅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奶躯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亿驾,死狀恐怖嘹黔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莫瞬,我是刑警寧澤儡蔓,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站疼邀,受9級(jí)特大地震影響喂江,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旁振,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一获询、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拐袜,春花似錦吉嚣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甜攀,卻和暖如春秋泄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背规阀。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工恒序, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姥敛。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓奸焙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彤敛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子与帆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • 什么是線程?什么是主線程墨榄?什么是子線程玄糟? 在我們程序運(yùn)行期間,每個(gè)正在運(yùn)行的代碼段袄秩,被稱為線程阵翎。 程序運(yùn)行期間逢并,至...
    可樂小子閱讀 387評(píng)論 0 0
  • NSThread 第一種:通過NSThread的對(duì)象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 799評(píng)論 0 3
  • 關(guān)于彌補(bǔ)!很多姑娘言看不懂我的很多東西郭卫!不要緊砍聊,就像盲人,失聰?shù)姆【瑲埣驳牟r颍V傻的!他們都活的就不痛快词疼? 想要痛快俯树,...
    縱情嬉戲天地間閱讀 179評(píng)論 0 0
  • Given a sorted array of integers nums and integer values ...
    Jeanz閱讀 94評(píng)論 0 0
  • 今天這里下雨了。 從飛機(jī)上下來之后小雨濛濛贰盗,前兩個(gè)小時(shí)還是艷陽高照许饿,后兩個(gè)小時(shí)就陰雨綿綿。 第一次來到這座城市只是...
    小怪獸打大boss閱讀 306評(píng)論 3 0