GCD学习(二)

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

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

    });

}));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容