美文网首页
第三章 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