美文网首页
第三章 3.2.3 Main Dispatch Queue /

第三章 3.2.3 Main Dispatch Queue /

作者: MrSYLong | 来源:发表于2018-07-25 21:50 被阅读2次

第二种获取Dispatch Queue的方法就是用系统标准提供的Dispatch Queue。

1、Main Dispatch Queue:
是在主线程中执行的Dispatch Queue。因为主线程只有一个,所以它是Serial Dispatch Queue。追加到Main Dispatch Queue的处理在主线程的RunLoop中执行。

2、Global Dispatch Queue:
是所有应用程序都能够使用的Concurrent Dispatch Queue。
有四个执行优先级,高优先级(High Priority)、默认优先级(Default Priority)、低优先级(Low Priority)和后台优先级(Background Priority)。
XNU内核管理的用于Global Dispatch Queue的线程,将各自使用的Global Dispatch Queue的执行优先级作为线程的执行优先级使用。
向Global Dispatch Queue中追加处理时,要选择与处理内容对应的执行优先级的Global Dispatch Queue。

获取Dispatch Queue的例子

// 获取Main Dispatch Queue
dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();

// 获取高优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueHigh = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

// 获取默认优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueDefault = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 获取低优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueLow = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

// 获取后台优先级的Global Dispatch Queue
dispatch_queue_t globalDispatchQueueBackground = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);

// dispatch_get_global_queue函数的第二个参数?标志?

内存管理方面:
Main Dispatch Queue、Global Dispatch Queue执行dispatch_retain函数和dispatch_release函数不会引起任何变化,也不会引起任何问题。
原因为什么??

使用例子:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
    // 可并行执行的处理
    dispatch_async(dispatch_get_main_queue(), ^{
        
        // 只能在主线程中执行的处理
    });
});

相关文章

网友评论

      本文标题:第三章 3.2.3 Main Dispatch Queue /

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