GCD线程的应用
2016-02-12 23:22
260 查看
GCD的创建 看了视频从大神的代码里面复制进来 先用OC版的 首先是串行队列,是一条一条语句执行的 而并发队列 你并不知道执行的先后顺序是咋样的 首先是要创界队列 随后在队列里面去执行线程
延时受阻 就是在多少秒以后 开始执行这个线程 GCD线程的相对优势是代码的创建相对简单 如下
GCD定时器 就是每个几秒会执行这个函数
信号量的应用
//构建串行队列 -(void)serialQueue{ //创建串行的队列 GCDQueue *queue = [[GCDQueue alloc]initSerial]; //执行串行队列中的语句 一句一句的执行 [queue execute:^{ NSLog(@"1"); }]; [queue execute:^{ NSLog(@"2"); }]; } //创建并发队列 -(void)initConctet{ GCDQueue *queue = [[GCDQueue alloc]initConcurrent]; [queue execute:^{ NSLog(@"1"); }]; [queue execute:^{ NSLog(@"2"); }];
延时受阻 就是在多少秒以后 开始执行这个线程 GCD线程的相对优势是代码的创建相对简单 如下
[GCDQueue executeInGlobalQueue:^{ NSLog(@"2"); } afterDelaySecs:(2.0f)];而用NSThead的好处是时间更加的精确
[self performSelector:@selector(print) withObject:self afterDelay:2.0f];
-(void)print{ NSLog(@"3"); }也可以用一个全局函数进行销毁 而GCD不能进行销毁
[NSObject cancelPreviousPerformRequestsWithTarget:self];GCD线程组的作用
//GCD线程组 当线程1和线程2执行完后,再去执行线程3 首先创建GCDGroup GCDGroup *group = [[GCDGroup alloc]init]; //创建线程 GCDQueue *queue = [[GCDQueue alloc]initConcurrent]; [queue execute:^{ sleep(1); NSLog(@"1"); } inGroup:group]; [queue execute:^{ sleep(3); NSLog(@"2"); } inGroup:group]; //第三个线程要监听 当线程1和线程2都完成后 才执行线程3 [queue notify:^{ NSLog(@"3"); } inGroup:group];
GCD定时器 就是每个几秒会执行这个函数
[self runNSTimer]; [self runGCDTimer]; } //使用GCDTimer的例子 -(void)runGCDTimer{ GCDTimer *GCDtimer = [[GCDTimer alloc]initInQueue:[GCDQueue mainQueue]]; [GCDtimer event:^{ NSLog(@"1"); //注意这里的时间是秒 } timeInterval:NSEC_PER_SEC]; //执行GDCTimer [GCDtimer start]; } //使用NSTimer的例子 -(void)runNSTimer{ self.NStimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(print) userInfo:nil repeats:true]; } -(void)print{ NSLog(@"2"); }
信号量的应用
//信号量的使用 创建信号量 GCDSemaphore *semaphore = [[GCDSemaphore alloc]init]; //在等待线程1执行完后,才执行线程2,这个时候便可以用信号,wait和发送信号是一对出现的 [GCDQueue executeInGlobalQueue:^{ NSLog(@"1"); //执行完后发送 [semaphore signal]; }]; [GCDQueue executeInGlobalQueue:^{ //等待信号发送过来 [semaphore wait]; NSLog(@"2"); }]; }
相关文章推荐
- android 的文件存储
- JavaWeb_相对路径与绝对路径
- JavaWeb_Session讲解
- 李彦宏:百度的成功和谷歌退出没有必然联系
- 李彦宏:百度的成功和谷歌退出没有必然联系
- hdu1114 Piggy-Bank(完全背包)
- js三元运算符 js运算符优先级
- java学习--常量池
- Curator框架
- 在腾讯的第一堂产品课——菜鸟产品经理还是有专业度的产品经理------文章整理
- knockoutjs九 submit绑定
- 树莓派上Ubuntu14.04 mate设置
- std::queue
- knockoutjs八 event绑定
- js随机生成26个大小写字母
- 获取一串文字的高度
- MySQL主主互备结合keepalived实现高可用 推荐
- bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
- UITableView添加footerView按钮
- [工作中的设计模式]责任链模式chain