美文网首页
第46条:不要使用dispatch_get_current_qu

第46条:不要使用dispatch_get_current_qu

作者: MrSYLong | 来源:发表于2018-10-14 21:59 被阅读6次

在使用GCD时,经常需要判断当前代码正在那个队列上执行,GCD中有:

dispatch_get_current_queue()

但iOS系统从6.0版本起就正式弃用此函数,只应做调用之用。此函数的行为常常与开发者所预期的不同。

队列之间会形成一套层级体系,这意味着在某个队列中的块,会在其上级队列(也就是父队列)里执行。这样也导致无法单用某个队列对象来描述“当前队列”这一概念。层级里地位最高的那个队列总是“全局并发队列”。

想要解决需要知道当前队列才可以解决的死锁问题,通常也可以改用“队列特定数据”来解决。

dispatch_queue_t queueA = dispatch_queue_create("com.effectiveobjectivec.queueA", NULL);
dispatch_queue_t queueB = dispatch_queue_create("com.effectiveobjectivec.queueB", NULL);
// 设置两个队列的优先级为一样的
dispatch_set_target_queue(queueB, queueA);

static int kQueueSpecific;
CFStringRef queueSpecificValue = CFSTR("queueA");
// 队列A上设置“队列特定值” 参数:待设置数据队列、键(void指针)、值(void指针)、析构函数(对值进行内存管理)
dispatch_queue_set_specific(queueA, &kQueueSpecific, (void*)queueSpecificValue, (dispatch_function_t)CFRelease);

dispatch_sync(queueB, ^{
    dispatch_block_t block = ^{
        NSLog(@"no deadlock");
    };
    CFStringRef retrievedValue = dispatch_get_specific(&kQueueSpecific);
    if (retrievedValue) {
        block();
    } else {
        dispatch_sync(queueA, block);
    }
});

相关文章

  • 第46条:不要使用dispatch_get_current_qu

    在使用GCD时,经常需要判断当前代码正在那个队列上执行,GCD中有: 但iOS系统从6.0版本起就正式弃用此函数,...

  • GCD的串行队列同步死锁问题

    《Effective Objective-C 2.0》中“第46条:不要使用dispatch_get_curren...

  • 使用JavaScript的12条建议

    尽量使用===/!==代替==/!= 不要使用with 不要使用eval 不要使用continue switch种...

  • Effective Java(第3版)第5章总结

    第26条:请不要使用原生态类型 当类有泛型的时候,请不要省略泛型 第27条:消除非受检的警告 IDE提示黄线的地方...

  • 文案的使用小总结

    1) 保持简短、。简明,简单,准确,有用。 用户:一个字,文案不要啰哩啰嗦! 2) 保持友好。使用缩写。直接使用第...

  • 第36条:不要使用retainCount

    Objective-C通过引用计数来管理内存,每个对象都有一个计数器,其值表明还有多少个其他对象想令此对象继续存活...

  • effective java 第五章 (笔记)

    第5章 泛型 java 1.5增加了泛型。 *** 第23条:请不要在新代码中使用原生态类型 *** 泛型类和接口...

  • 前端框架SUI踩坑

    重要的话说三遍: 不要使用阿里开源项目 不要使用阿里开源项目 不要使用阿里开源项目

  • 《乔布斯的魔力演讲》(6)

    第8场 简化一切避免使用项目符号。永远不要用,尽量不要用。在书、文件和电子邮件这类意在让读者阅读的东西里,如果...

  • CSI讲义14--编程作业格式要求

    命名方法 不要使用拼音。文件名尽量避免使用中文。 变量 不要使用拼音,不要使用单字符变量,循环控制变量除外。一般,...

网友评论

      本文标题:第46条:不要使用dispatch_get_current_qu

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