GCD&NSOperation

GCD是基于c的底层api,NSOperation属于object-c类。相对于GCD :

1,NSOperation拥有更多的函数可用,具体查看api。
2,在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系。
3,有kvo,可以监测operation是否正在执行(isExecuted)、是否结束(isFinished),是否取消(isCanceld)。
4,NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。
5GCD主要与block结合使用。

 

/    /**< 自定义queue,默认串行: NULL == DISPATCH_QUEUE_SERIAL*/

    /**< label:标签,用于标注queue*/

    dispatch_queue_t queue = dispatch_queue_create("label", NULL);

    dispatch_async(queue, ^{

        NSLog(@"test");

    });

    

    /**< 自定义queue,并行或串行: DISPATCH_QUEUE_CONCURRENTDISPATCH_QUEUE_SERIAL*/

    dispatch_queue_t serial_queue = dispatch_queue_create("标签", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(serial_queue, ^(){

        sleep(5);

        NSLog(@"block_1"); // 尽管为异步调用且延迟3秒,但如果在serial队列中,block_1仍然先于block_2被打印出来

    });

    dispatch_async(serial_queue, ^(){

        NSLog(@"block_2");

    });

    

    /**< 延迟执行*/

    /**< (int64_t)(delayInSeconds * NSEC_PER_SEC):转换成毫秒*/

    double delayInSeconds = 5.0;

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

        NSLog(@"5s delay");

    });

    

    /**< 常用的异步并发执行*/

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{

        sleep(5);

        NSLog(@"block_1");

    });

    

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{

        NSLog(@"block_2");

    });

    

    /**< 异步并回调主线程,常用ui更新*/

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0), ^{

        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"to do with ui");

        });

    });

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值