IOS学习 GCD 延时执行三种方法 并行/串行/主队列综合练习 队列组 shift+command+o快速查找

http://www.cnblogs.com/pure/archive/2013/03/31/2977420.html

http://www.cocoachina.com/industry/20140428/8248.html


http://blog.csdn.net/samuelltk/article/details/9452203/


按shift+command+o快速查找



-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{   

    [selfdemo];

}


//延时执行

-(void)demo{

    //方法1 timer

//    NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(task) userInfo:nil repeats:YES];

//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

    

    //方法2

    [selfperformSelector:@selector(task)withObject:nilafterDelay:3];

    

    //方法3

    /*参数1:延时时间  dispatch_time生成时间 纳秒为计时单位 精度高

     *参数2:队列

     *参数3:任务

     *异步执行       */

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

        NSLog(@"task");

    });

    NSLog(@"over");

}


-(void)task{

    NSLog(@"task");

}


//模拟下载任务

/*1、下载 L01.zip

 *2、下载 L02.zip

 *3、通知UI:下载完成

 123之前执行

 */

-(void)demo1{

    //串行,异步顺序下载

    dispatch_queue_t serialQueue =dispatch_queue_create("serialQueue",DISPATCH_QUEUE_SERIAL);

    

    dispatch_async(serialQueue, ^{

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间

        dispatch_async(serialQueue, ^{

            NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);

        });

    

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间

        dispatch_async(serialQueue, ^{

            NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);

        });

    

        dispatch_async(serialQueue, ^{

            dispatch_async(dispatch_get_main_queue(), ^{

                NSLog(@"%@下载完成",[NSThreadcurrentThread]);

            });

        });

    });

}


-(void)demo2{

    //并行异步   "shift+command+o"快速查找

    dispatch_queue_t concurrentQueue =dispatch_queue_create("concurrentQueue",DISPATCH_QUEUE_CONCURRENT);

    

    dispatch_async(concurrentQueue, ^{

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间

        //并行同步顺序下载

        dispatch_sync(concurrentQueue, ^{

             NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);

        });

        

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//5秒内的随机时间

        dispatch_sync(concurrentQueue, ^{

            NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);

        });

        

        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"%@下载完成",[NSThreadcurrentThread]);

        });

    });

}


//任务12在子线程上先顺序执行后,任务34在主线程上执行,最后任务567在子线程上并发无序执行

-(void)demo3{

    dispatch_queue_t serialQueue =dispatch_queue_create("serialQueue",DISPATCH_QUEUE_SERIAL);

    dispatch_queue_t concurrentQueue =dispatch_queue_create("concurrentQueue",DISPATCH_QUEUE_CONCURRENT);

    

    dispatch_async(concurrentQueue, ^{

        dispatch_sync(serialQueue, ^{

            NSLog(@"%@执行任务1",[NSThreadcurrentThread]);

        });

        

        dispatch_sync(serialQueue, ^{

            NSLog(@"%@执行任务2",[NSThreadcurrentThread]);

        });

        

        dispatch_sync(dispatch_get_main_queue(), ^{

            NSLog(@"%@执行任务3",[NSThreadcurrentThread]);

        });


        dispatch_sync(dispatch_get_main_queue(), ^{

            NSLog(@"%@执行任务4",[NSThreadcurrentThread]);

        });

        

        dispatch_async(concurrentQueue, ^{

            dispatch_async(concurrentQueue, ^{

                NSLog(@"%@执行任务5",[NSThreadcurrentThread]);

            });

            dispatch_async(concurrentQueue, ^{

                NSLog(@"%@执行任务6",[NSThreadcurrentThread]);

            });

            dispatch_async(concurrentQueue, ^{

                NSLog(@"%@执行任务7",[NSThreadcurrentThread]);

            });

        });

    });

}


//队列组

-(void)demo4{

    NSLog(@"begin");

    //创建队列组

    dispatch_group_t group =dispatch_group_create();

    

    //开启异步任务

    dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{

        //模拟网络卡

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间

        NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);

    });

    

    dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{

        //模拟网络卡

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间

        NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);

    });


    dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{

        NSLog(@"%@下载完成",[NSThreadcurrentThread]);

    });

}


-(void)demo5{

/*    dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)

    {

        dispatch_retain(group);

        dispatch_group_enter(group);

        dispatch_async(queue, ^{

            block();

            dispatch_group_leave(group);

            dispatch_release(group);

        });     */

    

    dispatch_group_t group =dispatch_group_create();

    

    dispatch_group_enter(group);

    dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{

        //模拟网络卡

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间

        NSLog(@"%@下载 L01.zip",[NSThreadcurrentThread]);

        dispatch_group_leave(group);

    });

    

    dispatch_group_enter(group);

    dispatch_group_async(group,dispatch_get_global_queue(0,0), ^{

        //模拟网络卡

        [NSThreadsleepForTimeInterval:arc4random_uniform(5)];//休眠5秒内随机时间

        NSLog(@"%@下载 L02.zip",[NSThreadcurrentThread]);

        dispatch_group_leave(group);

    });


    dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{

        NSLog(@"%@下载完成",[NSThreadcurrentThread]);

    });

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值