GCD线程的应用

来源:互联网 发布:跟兄弟连学php老版视频 编辑:程序博客网 时间:2024/06/08 04:16

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




0 0
原创粉丝点击