iOS编程之GCD

2021-03-29  本文已影响0人  落魄的iOS程序员

在使用GCD之前先了解一下有哪些好处?

        GCD可以多任务并行执行;可以更多地利用CPU资源;会自动管理线程的生命周期,程序员只需要告诉GCD要执行的任务,不需要程序员去手动管理;

 GCD有四种模式:这里有同步和异步任务,还有串行和并行队列;

dispatch_queue_create(const char *_Nullable label,dispatch_queue_attr_t _Nullable attr);

方法创建一个队列,第一个参数是一个字符,第二个参数是创建串行队列还是并行队列,DISPATCH_QUEUE_CONCURRENT表示并行队列,DISPATCH_QUEUE_SERIAL表示串行队列;void

dispatch_sync(dispatch_queue_t queue, DISPATCH_NOESCAPE dispatch_block_t block);方法是同步任务;

dispatch_async(dispatch_queue_t queue, DISPATCH_NOESCAPE dispatch_block_t block);方法是异步任务;

1、同步+串行队列

创建一个串行队列:

dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_SERIAL);

dispatch_sync(queue, ^{

NSLog(@"同步+串行队列=%@",[NSThread currentThread]);

这里打印线程为主线程main

})

2、异步+串行队列

dispatch_async(queue, ^{

NSLog(@"同步+串行队列=%@",[NSThread currentThread]);

这里打印线程创建了一个新子线程,这里添加多个任务的话为同一个子线程

})

3、同步+并行队列

创建一个并行队列:

dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_CONCURRENT);

dispatch_sync(queue, ^{

NSLog(@"同步+串行队列=%@",[NSThread currentThread]);

这里打印线程和主线程一样

})

4、异步+并行队列

dispatch_async(queue, ^{

NSLog(@"同步+串行队列=%@",[NSThread currentThread]);

这里打印线程创建了一个新子线程,这里如果添加多个任务的话就是多个子线程

})

最后在线程的使用中要注意线程死锁问题。线程死锁其实和循环引用比较类似,就是A等待B执行完,B等待A执行完,造成线程死锁。

上一篇下一篇

猜你喜欢

热点阅读