多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > Dispatch Group的使用

Dispatch Group的使用

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-04-14 08:50:38 閱讀次數(shù):2521次

轉(zhuǎn)自MJ偶像

Dispatch Group的使用

假定有這樣1個(gè)需求:從網(wǎng)絡(luò)上下載兩張不同的圖片,然后顯示到不同的UIImageView上去,1般可以這樣實(shí)現(xiàn)

[java] view plaincopy
  1. // 根據(jù)url獲得UIImage  
  2. - (UIImage *)imageWithURLString:(NSString *)urlString {  
  3.     NSURL *url = [NSURL URLWithString:urlString];  
  4.     NSData *data = [NSData dataWithContentsOfURL:url];  
  5.     return [UIImage imageWithData:data];  
  6. }  
  7.   
  8. - (void)downloadImages {  
  9.     // 異步下載圖片  
  10.     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  11.         // 下載第1張圖片  
  12.         NSString *url1 = @"http://car0.autoimg.cn/upload/spec/9579/u_20120110174805627264.jpg";  
  13.         UIImage *image1 = [self imageWithURLString:url1];  
  14.           
  15.         // 下載第2張圖片  
  16.         NSString *url2 = @"http://hiphotos.baidu.com/lvpics/pic/item/3a86813d1fa41768bba16746.jpg";  
  17.         UIImage *image2 = [self imageWithURLString:url2];  
  18.           
  19.         // 回到主線程顯示圖片  
  20.         dispatch_async(dispatch_get_main_queue(), ^{  
  21.             self.imageView1.image = image1;  
  22.               
  23.             self.imageView2.image = image2;  
  24.         });  
  25.     });  
  26. }  
雖然這類方案可以解決問(wèn)題,但其實(shí)兩張圖片的下載進(jìn)程其實(shí)不需要按順序履行,并發(fā)履行它們可以提高履行速度。有個(gè)注意點(diǎn)就是必須等兩張圖片都下載終了后才能回到主線程顯示圖片。Dispatch Group能夠在這類情況下幫我們提升性能。下面先看看Dispatch Group的用途:

我們可使用dispatch_group_async函數(shù)將多個(gè)任務(wù)關(guān)聯(lián)到1個(gè)Dispatch Group和相應(yīng)的queue中,group會(huì)并發(fā)地同時(shí)履行這些任務(wù)。而且Dispatch Group可以用來(lái)阻塞1個(gè)線程, 直到group關(guān)聯(lián)的所有的任務(wù)完成履行。有時(shí)候你必須等待任務(wù)完成的結(jié)果,然后才能繼續(xù)后面的處理。

下面用Dispatch Group優(yōu)化上面的代碼:

[java] view plaincopy
  1. // 根據(jù)url獲得UIImage  
  2. - (UIImage *)imageWithURLString:(NSString *)urlString {  
  3.     NSURL *url = [NSURL URLWithString:urlString];  
  4.     NSData *data = [NSData dataWithContentsOfURL:url];  
  5.     // 這里并沒(méi)有自動(dòng)釋放UIImage對(duì)象  
  6.     return [[UIImage alloc] initWithData:data];  
  7. }  
  8.   
  9. - (void)downloadImages {  
  10.     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);  
  11.       
  12.     // 異步下載圖片  
  13.     dispatch_async(queue, ^{  
  14.         // 創(chuàng)建1個(gè)組  
  15.         dispatch_group_t group = dispatch_group_create();  
  16.           
  17.         __block UIImage *image1 = nil;  
  18.         __block UIImage *image2 = nil;  
  19.           
  20.         // 關(guān)聯(lián)1個(gè)任務(wù)到group  
  21.         dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  22.             // 下載第1張圖片  
  23.             NSString *url1 = @"http://car0.autoimg.cn/upload/spec/9579/u_20120110174805627264.jpg";  
  24.             image1 = [self imageWithURLString:url1];  
  25.         });  
  26.           
  27.         // 關(guān)聯(lián)1個(gè)任務(wù)到group  
  28.         dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  29.             // 下載第1張圖片  
  30.             NSString *url2 = @"http://hiphotos.baidu.com/lvpics/pic/item/3a86813d1fa41768bba16746.jpg";  
  31.             image2 = [self imageWithURLString:url2];  
  32.         });  
  33.           
  34.         // 等待組中的任務(wù)履行終了,回到主線程履行block回調(diào)  
  35.         dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
  36.             self.imageView1.image = image1;  
  37.             self.imageView2.image = image2;  
  38.               
  39.             // 千萬(wàn)不要在異步線程中自動(dòng)釋放UIImage,由于當(dāng)異步線程結(jié)束,異步線程的自動(dòng)釋放池也會(huì)被燒毀,那末UIImage也會(huì)被燒毀  
  40.               
  41.             // 在這里釋放圖片資源  
  42.             [image1 release];  
  43.             [image2 release];  
  44.         });  
  45.           
  46.         // 釋放group  
  47.         dispatch_release(group);  
  48.     });  
  49. }  
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本欧美韩国 | 国产尤物在线观看 | 成人看片毛片免费播放器 | 国内精品久久久久久中文字幕 | 999精品免费视频 | 欧美巨大黑人精品videos人妖 | 日本中文字幕一区二区有码在线 | 国产永久在线观看 | 最近最新中文字幕8 | 亚洲小视频网站 | 国产精品成人观看视频国产 | 波多野结衣免费在线视频 | 亚洲高清在线天堂精品 | 亚欧色| 亚洲成人第一 | 国产欧美性综合视频性刺激 | 久久精品亚洲欧美日韩久久 | 亚洲图片欧美在线 | 国产三级理论片 | 最近中文字幕免费版在线 | 激情综合色综合久久综合 | 成人社区网站 | 高清日本无a区 | 亚洲国产精品综合福利专区 | 欧美手机手机在线视频一区 | 久久99精品国产99久久 | 亚洲人视频在线观看 | 欧美97| 国产一区精品视频 | 97一区二区三区 | 最新的国产成人精品2022 | 亚洲第一区二区快射影院 | 成 黄 色 激 情视频网站 | 国产精品三级视频 | 日本在线观看www免费 | 三级欧美在线 | 国产精品免费一区二区区 | 欧美黑人巨大xxxx | 最近中文字幕免费2019高清 | 精品三级国产一区二区三区四区 | 最新内地三级在线观看 |