首页 > 其他 > 详细

GCD-Grand Central Dispatch

时间:2016-01-03 17:17:00      阅读:310      评论:0      收藏:0      [点我收藏+]

经常要用的,总结分类一下。

   //获得队列
    dispatch_queue_t Queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
    
    dispatch_queue_t MainQueue = dispatch_get_main_queue();
    
    //自定义Queue 第二参数默认串行(FIFO)  DISPATCH_QUEUE_CONCURRENT(可选,并发)
    dispatch_queue_t SelfQueue = dispatch_queue_create("COM.M1989.Queue", NULL);
    
    
    //dispatch_async
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
        
        //Do Some?
        
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
        
        //耗时操作
        
         dispatch_async(dispatch_get_main_queue(), ^{
             
             //更新界面
             
         });
        
    });
    
    //dispatch_once_t 单例模式常用
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
    
    
    // dispatch_apply 并行,可利用CPU多核进行多线程操作 不过会阻塞当前线程,
    
    dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t y) {
        
        NSLog(@"123,%zu",y);
        
    });
    
    //觉得还是反正子线程比较好。如下
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
         
         dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t y) {
             
             NSLog(@"123,%zu",y);
             
         });
         
     });
    
    //dispatch_after 延迟执行,缺点不能临时取消,起码NSTimer 有个-(void)invalidate 能取消
    
    double Seconds = 10.0;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (Seconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^(void){
        //延后10秒需要执行的代码
    });
    
    //dispatch_group_t 并行 group全部完成后发消息给notify,执行notify里block内容。 不阻塞当前线程。。。。
    dispatch_group_t groupQ = dispatch_group_create();
    
    dispatch_group_async(groupQ, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"1");
    });
    
    dispatch_group_async(groupQ, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"2");
    });
    
    dispatch_group_async(groupQ, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        for(int i = 0;i<10000;i++){
            NSLog(@"3");
        }
    });
    
    dispatch_group_notify(groupQ, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       
        NSLog(@"OK");
        
    });

    //dispatch_barrier_async  等待前面所有的任务执行完,并中断在此之后的任务。当前面的任务执行完后,此会执行,并恢复后面的任务。(试了,结果不理想)
    
    dispatch_barrier_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"barrier");
    });

 

未完待续。。。

GCD-Grand Central Dispatch

原文:http://www.cnblogs.com/ngi8/p/5096581.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!