dispatch_after dispatch_group_async dispatch_once

/**

     *  dispatch_after 从现在开始经过多少纳秒之后,由队列调度任务

     *  when    从现在开始经过多少纳秒之后

     *  queue   dispatch_get_main_queue(),

     *  block    "异步"任务

     */

    dispatch_time_t when =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 *NSEC_PER_SEC));

    dispatch_after(when,dispatch_get_main_queue(), ^{

        NSLog(@"%@", [NSThreadcurrentThread]);

    });


打印结果:

2015-07-02 16:07:58.300 gcd_test[1385:91601] <NSThread: 0x7be4b9f0>{number = 1, name = main}

/**

     *  dispatch_after 从现在开始经过多少纳秒之后,由队列调度任务

     *  when 从现在开始经过多少纳秒之后

     *  queue dispatch_get_global_queue(00)(并发队列)

     *  block "异步"任务

     */

    dispatch_time_t when =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 *NSEC_PER_SEC));

    dispatch_after(when,dispatch_get_global_queue(0,0), ^{

        NSLog(@"%@", [NSThreadcurrentThread]);

    });


打印结果:

2015-07-02 16:09:39.402 gcd_test[1409:92593] <NSThread: 0x79764580>{number = 2, name = (null)}



/**

     *  dispatch_after 从现在开始经过多少纳秒之后,由队列调度任务

     *  when 从现在开始经过多少纳秒之后

     *  queue 队列

     *  block "异步"任务

     */

    dispatch_time_t when =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 *NSEC_PER_SEC));

    dispatch_after(when,dispatch_queue_create("串行",NULL), ^{

        NSLog(@"%@", [NSThreadcurrentThread]);

    });

打印结果:

2015-07-02 16:12:06.095 gcd_test[1429:93621] <NSThread: 0x7864e900>{number = 2, name = (null)}

得出结论,dispatch_after是执行异步任务



/分组

    //案例:譬如要下载四本小说,最后全部下载完成之后,通知用户。

    

    //创建一个任务组,可以在任务组中指定队列派发任务

    //任务组,是可以跨队列的,所有的异步任务完成后,在主线程跟新UI

    dispatch_group_t group = dispatch_group_create();

    dispatch_queue_t q = dispatch_get_global_queue(0, 0);

    dispatch_group_async(group, q, ^{

        NSLog(@"下载 小说1 %@", [NSThread currentThread]);

    });

    dispatch_group_async(group, q, ^{

        NSLog(@"下载 小说2 %@", [NSThread currentThread]);

    });

    dispatch_group_async(group, q, ^{

        NSLog(@"下载 小说3 %@", [NSThread currentThread]);

    });

    dispatch_group_async(group, q, ^{

        NSLog(@"下载 小说4 %@", [NSThread currentThread]);

    });

    

    //给任务组添加通知

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

        NSLog(@"全部小说下载完成 %@", [NSThread currentThread]);

    });


//dispatch_once 一次性执行

//在程序开发中,通常有些代码只希望执行一次,例如重要的初始化”,单例设计模式

    //onceToken是保存在静态区的,如果是0,就执行block

    //dispatch_once是线程安全的

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        //要执行一次的代码

        

    });




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值