dispatch_group_async可以實現監聽一組任務是否完成,完成后得到通知執行其他的操作。這個方法很有用,比如你執行三個下載任務,當三個任務都下載完成后你才通知界面說完成的了。下面是一段例子代碼:
- [cpp]
- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_group_t group = dispatch_group_create();
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:1];
- NSLog(@"group1");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:2];
- NSLog(@"group2");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:3];
- NSLog(@"group3");
- });
- dispatch_group_notify(group, dispatch_get_main_queue(), ^{
- NSLog(@"updateUi");
- });
- dispatch_release(group);
- dispatch_group_async是異步的方法,運行后可以看到打印結果:
- 2012-09-25 16:04:16.737 **Test[43328:11303] group1
- 2012-09-25 16:04:17.738 **Test[43328:12a1b] group2
- 2012-09-25 16:04:18.738 **Test[43328:13003] group3
- 2012-09-25 16:04:18.739 **Test[43328:f803] updateUi
每個一秒打印一個,當第三個任務執行后,upadteUi被打印。3、dispatch_barrier_async的使用
dispatch_barrier_async是在前面的任務執行結束后它才執行,而且它后面的任務等它執行完成之后才會執行
例子代碼如下:
- [cpp]
- dispatch_queue_t queue = dispatch_queue_create("**test.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT);
- dispatch_async(queue, ^{
- [NSThread sleepForTimeInterval:2];
- NSLog(@"dispatch_async1");
- });
- dispatch_async(queue, ^{
- [NSThread sleepForTimeInterval:4];
- NSLog(@"dispatch_async2");
- });
- dispatch_barrier_async(queue, ^{
- NSLog(@"dispatch_barrier_async");
- [NSThread sleepForTimeInterval:4];
- });
- dispatch_async(queue, ^{
- [NSThread sleepForTimeInterval:1];
- NSLog(@"dispatch_async3");
- });
打印結果:
2012-09-25 16:20:33.967 **Test[45547:11203] dispatch_async1
2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_async2
2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_barrier_async
2012-09-25 16:20:40.970 **Test[45547:11303] dispatch_async3
請注意執行的時間,可以看到執行的順序如上所述。
4、dispatch_apply
執行某個代碼片段N次。
- dispatch_apply(5, globalQ, ^(size_t index) {
- // 執行5次
- });
原文鏈接:http://www.2cto.com/kf/201209/157722.html
點擊返回按鈕以后,取消gcd子線程
dispatch_suspend(downloadNewsQueue);
dispatch_release(downloadNewsQueue);
downloadNewsQueue=nil;
注意:gcd在使用時,也要判斷一下downloadNewsQueue是否為nil
參考:http://www.cocoachina.com/bbs/simple/?t129464.html