IOS中GCD的使用

释放双眼,带上耳机,听听看~!

 

详解IOS中GCD的使用

1. GCD是苹果公司为多核的并行运算提出的解决方案

GCD会自动利用更多的CPU内核(比如双核、四核)

GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

进程:也就是一个正在运行的应用程序。

线程:进程中的某一条完整的执行路径。一个进程可以有多个线程,至少有一个线程,即主线程。在iOS开发中,所有涉及UI界面的,必须在主线程中更新。

2. GCD的工作原理:让程序平行排队,根据可用的处理资源,安排他们在任何可用的处理器上执行任务

3. 串行队列,并行队列,同步任务,异步任务。 异步任务会开辟线程:异步任务在串行队列只开启一个子线程,异步任务在并行队列开启多个子线程。

//GCD 并行队列,异步任务:开启多个线程,同时执行。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
for (int i =0; i

4.我们平时使用多线程,会经常碰到一种需求:子线程任务处理完成之后,需要主线程更新UI。我们如何才能知道子线程的任务都完成了。

当我们使用串行队列时,只需将最后的回调主线程任务添加在所有任务的最后,顺序执行,便可回调。 但是当我们使用并行队列时候,就无法知道什么时候完成所有的子线程任务,

这时候,就得用到dispatch_group了。代码如下:

//我们同时执行几个异步任务,他们执行完了,我们有时候还得知道一下,,怎么办呢,这时候,就得用到dispatch_group了,如下编代码这样弄,到最后执行 dispatch_group_notify ,便可
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSLog(@"开始执行1");
});
dispatch_group_async(group, queue, ^{
NSLog(@"开始执行2");
});
dispatch_group_async(group, queue, ^{
NSLog(@"开始执行3");
});
dispatch_group_notify(group, queue, ^{
NSLog(@"全部执行完成,必须在主线程更新UI!!!");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"主线程更新UI完成。");
});
});

 

人已赞赏
iOS文章

iOS开发 IPv6测试

2020-2-14 10:56:12

iOS文章

Swift - Color Literal颜色智能提示 与 Image Literal图片智能提示

2020-2-14 11:33:44

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索