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"); }];
[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];
[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"); }]; }