码迷,mamicode.com
首页 > 编程语言 > 详细

多线程GCD用法

时间:2015-09-11 23:32:33      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:


1
// 后台执行: 2 dispatch_async(dispatch_get_global_queue(0, 0), ^{ 3 // something 4 }); 5 6 // 主线程执行: 7 dispatch_async(dispatch_get_main_queue(), ^{ 8 // something 9 }); 10 11 // 一次性执行: 12 static dispatch_once_t onceToken; 13 dispatch_once(&onceToken, ^{ 14 // code to be executed once 15 }); 16 17 // 延迟2秒执行: 18 double delayInSeconds = 2.0; 19 dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 20 dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 21 // code to be executed on the main queue after delay 22 }); 23 24 // 自定义dispatch_queue_t 25 dispatch_queue_t urls_queue = dispatch_queue_create("blog.yang99.com", NULL); 26 dispatch_async(urls_queue, ^{ 27    // your code 28 }); 29 dispatch_release(urls_queue);



31 // 合并汇总结果 32 dispatch_group_t group = dispatch_group_create(); 33 dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ 34 // 并行执行的线程一 35 }); 36 dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ 37 // 并行执行的线程二 38 }); 39 dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{ 40 // 汇总结果 41 });

 

 

下面是一个利用GCD后台下载图片,并在主线程中显示的核心代码:

 1 - (void)initializeUserinterface{
 2     self.indictorImageView.hidden = NO;
 3     [self.indictorImageView startAnimating];
 4     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 5         NSURL *url = [NSURL URLWithString:@"http://www.youdao.com"];
 6         NSError *error;
 7         NSString *data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
 8         if (data != nil) {
 9             dispatch_async(dispatch_get_main_queue(), ^{
10                 [self.indictorImageView stopAnimating];
11                 self.indictorImageView.hidden = YES;
12                 self.contentLabel.text = data;//文本显示
13                 NSLog(@"data = %@",data);
14                 [_webViewss loadHTMLString:data baseURL:url];//加载网页
15             });
16         }else{
17             NSLog(@"error when download:%@",error);
18         }
19     });
20 }

 

 

GCD的另一个用处是可以让程序在后台较长久的运行。

在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。让程序在后台长久运行的示例代码如下:

 1 // AppDelegate.h文件
 2 @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;
 3 
 4 // AppDelegate.m文件
 5 - (void)applicationDidEnterBackground:(UIApplication *)application
 6 {
 7     [self beingBackgroundUpdateTask];
 8     // 在这里加上你需要长久运行的代码
 9     [self endBackgroundUpdateTask];
10 }
11 
12 - (void)beingBackgroundUpdateTask
13 {
14     self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
15         [self endBackgroundUpdateTask];
16     }];
17 }
18 
19 - (void)endBackgroundUpdateTask
20 {
21     [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
22     self.backgroundUpdateTask = UIBackgroundTaskInvalid;
23 }

 

 

总结自:唐巧iOS开发进阶

 

多线程GCD用法

标签:

原文地址:http://www.cnblogs.com/yang99/p/4802314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!