GCD学习(二)

2016-07-25  本文已影响34人  FredYJH

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(),^{

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

    });

}));

上一篇下一篇

猜你喜欢

热点阅读