您的位置:首页 > 其它

GCD线程的应用

2016-02-12 23:22 260 查看
GCD的创建 看了视频从大神的代码里面复制进来 先用OC版的 首先是串行队列,是一条一条语句执行的 而并发队列 你并不知道执行的先后顺序是咋样的 首先是要创界队列 随后在队列里面去执行线程

//构建串行队列
-(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");
}];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: