GCD常用用法
来源:互联网 发布:赖昌星 红楼 知乎 编辑:程序博客网 时间:2024/04/30 09:59
/** * 2)并行队列global dispatch queue,通过dispatch_get_global_queue获取,由系统创建三个不同优先级的dispatch queue。并行队列的执行顺序与其加入队列的顺序相同。 3)串行队列serial queues一般用于按顺序同步访问,可创建任意数量的串行队列,各个串行队列之间是并发的。 当想要任务按照某一个特定的顺序执行时,串行队列是很有用的。串行队列在同一个时间只执行一个任务。我们可以使用串行队列代替锁去保护共享的数据。和锁不同,一个串行队列可以保证任务在一个可预知的顺序下执行。 */@implementation ViewController- (void)viewDidLoad { [superviewDidLoad]; // [self backThread];// [self mainThead];// // [self singleObj];// [self singleObj]; // [self afterTime];// [self mainThead]; // [self asyncGroup]; [selfasyncGroupMain];}// 后台执行 ---另开了一条线程处理- (void)backThread{ dispatch_async(dispatch_get_global_queue(0,0), ^{ for (int i =0; i<20; i++) { NSLog(@"backThread is name --- >%@",[NSThreadcurrentThread].description); } });}// 主线程执行--------在需要回到主线程的地方直接调用此方法。- (void)mainThead{ dispatch_async(dispatch_get_main_queue(), ^{ for (int i =0; i<20; i++) { NSLog(@"mainThead is name --- > %@", [NSThreadcurrentThread].description); } });}// 这个代码只会执行一次,常用于单利模式。- (void)singleObj{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"这里面的代码只会执行一次"); }); }// 延迟时间执行----调用这个方法并不会延迟主线程。其他的主线程的方法还是照样执行, 只是,后面的几秒钟后// 这个主线程的方法在回来执行,相当于一个回调。 并不会阻止其他的方法调用。- (void)afterTime{ dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,4.0*NSEC_PER_SEC); dispatch_after(time,dispatch_get_main_queue(), ^{ NSLog(@"等了4秒了,开始执行了......"); NSLog(@"mainThead is name --- > %@", [NSThreadcurrentThread].description); }); }// 并行线程组, 如果需要和主线程交互的话, 直接交互就好。- (void)asyncGroup{ dispatch_group_t group =dispatch_group_create(); dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{ for (int i =0; i<200; i++) { NSLog(@"我是线程一号"); } }); dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{ for (int i =0; i<200; i++) { NSLog(@"我是线程二号"); } }); dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{ NSLog(@"等待异步线程全部执行完后,我这里的总结----这里还是异步线程中,不在主线程"); NSLog(@"thread is -->%@",[NSThreadcurrentThread].description); // 和主线程通信 dispatch_async(dispatch_get_main_queue(), ^{ self.view.backgroundColor = [UIColororangeColor]; NSLog(@"thread is -->%@",[NSThreadcurrentThread].description); }); });}// 主线程处理。-----------异步和同步的处理的关键就是在于 dispatch_get_main_queue和 dispatch_get_global_queue// 的区别。 这里是主线程的第一个任务处理完了,那么后面的在执行。 这种方式也可以处理不会让公共// 资源的混乱的处理。- (void)asyncGroupMain{ // 自定义 串行队列 dispatch_queue_t serialqueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL); // 自定义 并行队列 dispatch_queue_t concurrentqueue = dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURRENT); // 自定义队列,在这里也就决定了, 你是用异步处理还是同步处理问题。 dispatch_group_t group =dispatch_group_create(); dispatch_group_async(group,dispatch_get_main_queue(), ^{ for (int i =0 ; i<20; i++) { NSLog(@"1号在执行"); } }); dispatch_group_async(group,dispatch_get_main_queue(), ^{ for (int i =0; i < 20; i++) { NSLog(@"2号在执行"); } }); dispatch_group_notify(group,dispatch_get_main_queue(), ^{ NSLog(@"我是最后执行的....."); });}
0 0
- GCD常用用法
- GCD用法
- 常用GCD
- IOS GCD timer用法
- GCD的简单用法
- GCD的简单用法
- GCD 基础用法
- GCD的简单用法
- GCD的简单用法
- GCD用法小结
- GCD的一些用法
- GCD部分用法
- GCD的用法总结
- GCD用法笔记
- GCD的简单用法
- GCD的简单用法
- GCD的常见用法
- GCD的基本用法
- FDMB的认识
- Windows服务程序开发介绍
- Android WebView开发问题及优化汇总
- DBContext Remove 不SaveChanges,之后的状态判断
- Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- GCD常用用法
- Django 模板目录配置
- 苹果在中国的审核规律探索一
- java map to json
- R语言:64位操作系统读取excel文件方法总结
- iOS UIBezierPath类 介绍
- cell.bounds.size.width 使用时的坑
- mfcc提取语音的mel倒谱系数及其一阶导数
- GCJ-02/BD-09/WGS-84/Web mercator 坐标转换