zoukankan      html  css  js  c++  java
  • 理解 dispatch_get_specific

    这篇文章原来在用 Github Pages 搭建的博客上,现在决定重新用回博客园,所以把文章搬回来。

    dispatch_queue_set_specific用于给一个队列设置相关的上下文数据,dispatch_get_specific用于获取队列相关的上下文数据。

    最重要的是dispatch_get_specific获取的是当前执行队列的相关数据,而不仅仅与 key 对应这一个条件

    看两个例子:

    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            dispatch_queue_t queue1 = dispatch_queue_create("com.ebebya.queue1", NULL);
            dispatch_queue_set_specific(queue1, key1, (void *)[@"ebebya" UTF8String], NULL);
            
            void *value = dispatch_get_specific(key1);
            NSLog(@"%@", value);
        }
        return 0;
    }
    

    上面的例子中,因为是在主线程中调用dispatch_get_specific ,即执行队列是主队列,因此 value 值是 NULL

    #import <Foundation/Foundation.h>
    
    static const void * const key1 = &key1;
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            dispatch_queue_t queue1 = dispatch_queue_create("com.ebebya.queue1", NULL);
            dispatch_queue_set_specific(queue1, key1, (void *)[@"ebebya" UTF8String], NULL);
            
            dispatch_async(queue1, ^{
                void *value = dispatch_get_specific(key1);
                NSString *str = [[NSString alloc] initWithBytes:value length:7 encoding:4];
                NSLog(@"%@", str);
            });
        }
        return 0;
    }
    

    这个例子中,在主队列中为 queue1 设置了上下文数据,即(void *)[@"ebebya" UTF8String],然后在 queue1 中调用dispatch_get_specific,此时执行队列是queue1,因此可以正确获取到之前设置的值。

    文章版权归个人所有,转载时请在文章显眼位置给出本文链接。
  • 相关阅读:
    codevs2894、2837、1669、2503、3231
    poj2528
    HDU 1542 Atlantis(矩形面积并)
    Light OJ 1080
    陶哲轩实分析 2.2节 习题试解
    Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
    css3模糊图片
    高速掌握Lua 5.3 —— I/O库 (1)
    覆盖率測试工具gcov的前端工具_LCOV_简单介绍
    MySQL显示状态信息
  • 原文地址:https://www.cnblogs.com/xjshi/p/7340548.html
Copyright © 2011-2022 走看看