ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> 深入理解Thread线程和Queue队列

深入理解Thread线程和Queue队列(1/3)

来源:网络整理     时间:2018-05-20     关键词:

本篇文章主要介绍了" 深入理解Thread线程和Queue队列",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: 思考一段代码我们先来看一段代码,猜猜一下代码的的运行结果: // 主队列 dispatch_queue_t mainQueue = dispatc...

思考一段代码

我们先来看一段代码,猜猜一下代码的的运行结果:

    // 主队列
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    // 给主队列设置一个标记
    dispatch_queue_set_specific(mainQueue, "key", "main", NULL);

    // 定义一个block任务
    dispatch_block_t log = ^{
        // 判断是否是主线程
        NSLog(@"main thread: %d", [NSThread isMainThread]);
        // 判断是否是主队列
        void *value = dispatch_get_specific("key");
        NSLog(@"main queue: %d", value != NULL);
    };

    // 全局队列
    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    // 异步加入全局队列里
    dispatch_async(globalQueue, ^{
        // 异步加入主队列里
        dispatch_async(dispatch_get_main_queue(), log);
    });

    NSLog(@"before dispatch_main");
    dispatch_main();
    NSLog(@"after dispatch_main");

运行结果:

2018-05-08 15:08:05.557398+0800 TestRunLoop[28206:767410] before dispatch_main
2018-05-08 15:08:05.557682+0800 TestRunLoop[28206:767462] main thread: 0  //不是主线程
2018-05-08 15:08:05.557814+0800 TestRunLoop[28206:767462] main queue: 1 //是主队列

什么情况?派发给主队列的任务不是在主线程上运行,跟我们平常用的和理解的完全不一样。

相关图片

相关文章