美文网首页Fuck iOS EveryDay
dispatch_queue_set_specific、disp

dispatch_queue_set_specific、disp

作者: 海文_L | 来源:发表于2018-12-17 18:39 被阅读7次

dispatch_queue_set_specific在文档中的解释是“使用此方法将自定义的上下文与队列关联,运行中的队列可用dispatch_get_specific检索。”

dispatch_queue_get_specific 是获取指定调度队列的上下文键/值数据。

dispatch_get_specific是获取当前调度队列的上下文键/值数据。

举个例说明下:

    const void * queueKey = "queueKey";
    const void * queueKey2 = "queueKey2";
    dispatch_queue_t queue = dispatch_queue_create(queueKey, NULL);
    dispatch_queue_t queue2 = dispatch_queue_create(queueKey2, NULL);
    
    //调用此方法会触发queueFunction函数,留个疑问queueFunction是在什么时候触发?
    dispatch_queue_set_specific(queue, queueKey, &queueKey, queueFunction);
    dispatch_queue_set_specific(queue2, queueKey2, &queueKey2, NULL);
    
    dispatch_sync(queue, ^{
        go();
    });
    dispatch_sync(queue2, ^{
        go();
    });
    
    if (dispatch_queue_get_specific(queue, queueKey)) {
        NSLog(@"__run in queue");
    }

    //main queue中找不到queueKey,所以这段Log不会触发,使用dispatch_get_specific(queueKey)的原理也一样
    if (dispatch_queue_get_specific(dispatch_get_main_queue(), queueKey)) {
        NSLog(@"__run in main queue");
    }
    if (dispatch_get_specific(queueKey)) {
        NSLog(@"__run in main queue");
    }
void go() {
    //使用dispatch_sync改变了当前的执行队列,所以这里可以检索到queueKey
    if(dispatch_get_specific("queueKey")) {
        NSLog(@"queue");
    } else if(dispatch_get_specific("queueKey2")) {
        NSLog(@"queue2");
    } else {
        NSLog(@"main queue");
    }
}

void queueFunction() {
    NSLog(@"__queueFunction");
}

相关文章

  • dispatch_queue_set_specific、disp

    dispatch_queue_set_specific在文档中的解释是“使用此方法将自定义的上下文与队列关联,运行...

  • dispatch_queue_set_specific和disp

    dispatch_queue_set_specific就是向指定队列里面设置一个标识 如: dispatch_qu...

  • GCDAsyncSocket GCD 的使用(1)

    dispatch_queue_set_specific, dispatch_get_specific 用来判断队列...

  • 2017.11.23 display fun --STM8

    unsigned char disp_mode; unsigned char disp_last_mode; un...

  • Function:disp

    用法 disp(A) celldisp(string) 含义 在命令行窗口展示这个变量的具体内容,句末加不加分号都...

  • iOS GCD简介(二)

    队列标识 dispatch_queue_set_specific给指定队列添加一个标识;dispatch_get_...

  • Lock

    iOS中保证线程安全的几种方式与性能对比 dispatch_queue_set_specific和dispatch...

  • Spring InitializingBean and Disp

    In Spring, InitializingBean and DisposableBean are two ma...

  • DISP子程序

    说明 本系列文章本人基本没有原创贡献,都是在学习过程中找到的相关书籍和教程相关内容的汇总和梳理编辑。为了尊重原创者...

  • dispatch_queue_set_specific

    dispatch_queue_set_specific 可重入的概念 首先,简单介绍下可重入的概念,比如一个函数,...

网友评论

    本文标题:dispatch_queue_set_specific、disp

    本文链接:https://www.haomeiwen.com/subject/apickqtx.html