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)
-
-
- (UIImage *)imageWithURLString:(NSString *)urlString {
-
NSURL *url = [NSURL URLWithString:urlString];
-
NSData *data = [NSData dataWithContentsOfURL:url];
-
return [UIImage imageWithData:data];
-
}
-
-
- (void)downloadImages {
-
-
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-
-
NSString *url1 = @"http://car0.autoimg.cn/upload/spec/9579/u_20120110174805627264.jpg";
-
UIImage *image1 = [self imageWithURLString:url1];
-
-
-
NSString *url2 = @"http://hiphotos.baidu.com/lvpics/pic/item/3a86813d1fa41768bba16746.jpg";
-
UIImage *image2 = [self imageWithURLString:url2];
-
-
-
dispatch_async(dispatch_get_main_queue(), ^{
-
self.imageView1.image = image1;
-
-
self.imageView2.image = image2;
-
});
-
});
-
}
雖然這類方案可以解決問(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)化上面的代碼:
-
-
- (UIImage *)imageWithURLString:(NSString *)urlString {
-
NSURL *url = [NSURL URLWithString:urlString];
-
NSData *data = [NSData dataWithContentsOfURL:url];
-
-
return [[UIImage alloc] initWithData:data];
-
}
-
-
- (void)downloadImages {
-
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
-
-
-
dispatch_async(queue, ^{
-
-
dispatch_group_t group = dispatch_group_create();
-
-
__block UIImage *image1 = nil;
-
__block UIImage *image2 = nil;
-
-
-
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-
-
NSString *url1 = @"http://car0.autoimg.cn/upload/spec/9579/u_20120110174805627264.jpg";
-
image1 = [self imageWithURLString:url1];
-
});
-
-
-
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-
-
NSString *url2 = @"http://hiphotos.baidu.com/lvpics/pic/item/3a86813d1fa41768bba16746.jpg";
-
image2 = [self imageWithURLString:url2];
-
});
-
-
-
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
-
self.imageView1.image = image1;
-
self.imageView2.image = image2;
-
-
-
-
-
[image1 release];
-
[image2 release];
-
});
-
-
-
dispatch_release(group);
-
});
-
}
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)