美文网首页
GCD学习(二)

GCD学习(二)

作者: FredYJH | 来源:发表于2016-07-25 14:15 被阅读34次

    GCD学习一 

    GCD学习二

    GCD学习三 


    一。队列有哪几种呢?

    1.1、自定义的队列 :dispatch_queue_create

    1.2、系统自带的队列:

        1.2.1、主队列 Main Dispatch Queue

        1.2.2、全局队列 Global Dispatch Queue (3个优先级+I/O)

    注意:在自定义队列中被调度的所有 block 最终都将被放入到系统的全局队列中和线程池中。


    1.1、自定义队列

    dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.example.gcd.MySerialDispatchQueue",NULL);

    第一个参数是队列的名称,要易懂

    第二个参数:NULL表示串行队列,DISPATCH_QUEUE_CONCURRENT表示并行队列

    注意:同步队列可生成任意多个,并放到异步线程执行的时候,如果个数太多,会出现内存大量消耗,影响性能。要控制队列个数。如图:

    那什么时候该使用同步线程呢?当出现并发队列竞争同一个资源的时候,我们可以用同步线程去控制。

    1.2、系统自带的队列

    1、Main Dispatch Queue:

    dispatch_queue_t mainDispatchQueue = dispatch_get_main_queue();

    dispatch_async((mainDispatchQueue,^{//主线程处理}));

    该方法的处理与NSObject类的performSelectorOnMainThread实例方法一样。

    2、Global Dispatch Queue

    dispatch_queue_t globalDispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    第一个参数有四种:都是并行队列

    DISPATCH_QUEUE_PRIORITY_DEFAULT 默认等级

    DISPATCH_QUEUE_PRIORITY_HIGH 最高等级

    DISPATCH_QUEUE_PRIORITY_LOW 最低等级

    DISPATCH_QUEUE_PRIORITY_BACKGROUND 后台运行,更低等级

    第二个参数:一般是0

    一般代码执行:

    dispatch_async((dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

        //可并行执行处理代码

        // 在main dispatch queue中执行block

        dispatch_async(dispatch_get_main_queue(),^{

        // 只能在主线程中执行处理

        });

    }));

    相关文章

      网友评论

          本文标题:GCD学习(二)

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