ios GCD一些常用的方法
2016-01-05 00:00
423 查看
摘要:
GCD一些常用的方法
GCD一些常用的方法
//1、创建主线程(串行) dispatch_async(dispatch_get_main_queue(), ^{ //刷新界面代码 }); //2、创建异步线程(并行) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //比较耗时的代码放这里 }); //3、gcd延迟 double delayInSeconds = 1.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ //延迟代码 }); //4、gcd只执行一次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //只执行一次代码 }); //5、有三个任务,需要异步并发执行前两个任务,前两个任务执行完成后再执行第三个任务。 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //创建组 dispatch_group_t group=dispatch_group_create(); // 关联一个任务到group dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //任务一 NSLog(@"******执行任务一******"); }); // 关联一个任务到group dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //任务二 NSLog(@"******执行任务二******"); }); // 等待组中的任务执行完毕,回到主线程执行block回调 dispatch_group_notify(group, dispatch_get_main_queue(), ^{ //任务三 NSLog(@"******等待组中的任务执行完毕,回到主线程执行block回调,执行任务三******"); }); }); //6、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行 dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"dispatch_async1"); }); dispatch_async(queue, ^{ NSLog(@"dispatch_async2"); }); dispatch_barrier_async(queue, ^{ NSLog(@"dispatch_barrier_async"); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"刷新界面"); }); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"dispatch_async3"); }); /*7、GCD的另一个用处是可以让程序在后台较长久的运行。 在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。 让程序在后台长久运行的示例代码如下: */ // AppDelegate.h文件 @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask; // AppDelegate.m文件 - (void)applicationDidEnterBackground:(UIApplication *)application { [self beingBackgroundUpdateTask]; // 在这里加上你需要长久运行的代码 [self endBackgroundUpdateTask]; } - (void)beingBackgroundUpdateTask { self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [self endBackgroundUpdateTask]; }]; } - (void)endBackgroundUpdateTask { [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask]; self.backgroundUpdateTask = UIBackgroundTaskInvalid; }
相关文章推荐
- ios 短信验证码第3方
- Xcode警告错误处理
- IOS7原生API进行二维码条形码的扫描
- IOS 设备
- iOS - 布尔值
- iOS开发:2分钟快速集成支付宝快捷支付 转发
- iOS core Data 详解-<1>基本使用
- IOS开发基础知识--碎片31
- 蓝懿ios技术交流和心得分享16.1.4
- 监控和安全运维 1.7 nagios配置邮件告警
- iOS开发-使用charles(青花瓷)抓包图文详解
- iOS三种定时器
- 监控和安全运维 1.6 nagios监控客户端-2
- 芒果iOS开发之mac下github使用
- 监控和安全运维 1.5 nagios监控客户端-1
- IOS crash atos
- 对比iOS中的四种数据存储
- iOS开发多线程篇—GCD介绍
- iOS 判断并使用 百度地图 高德地图 自带地图 导航(使用URI,不集成sdk)
- iOS为多张图片设置相同的大小