ios-UI高级 GCD的相关设置

本文深入探讨了GCD(Grand Central Dispatch)及其在并发编程中的应用,包括串行与并行队列、任务调度机制等内容,并介绍了NSRunLoop在事件处理及线程管理中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、GCD(Grand Central Dispatch)可理解为:“牛逼的中心调度”
·Apple提供的一套更底层、更高效的并发编程技术,纯C语言、基于Block ·支持同步或异步任务处理,串行、并行的处理队列,非系统调用的信号量机制,定时任务处理,进程、文件或网络的监听任务等
优点
·易用: GCD比之thread更简单易用。基于block的特性导致它能简单的在不同代 码作用域之间传递上下文
·效率: GCD实现功能 轻量、优雅,使得它在很多地方比之专门创建消耗资源的线程更 实用且快速
·性能: GCD自动根据系统负载来增减线程数量,这就减少了上下文切换以及增加了计算效率
·安全: 无需加锁或其他同步机制
2、Dispatch Queue
Dispatch Queue是执行处理的等待队列,通过dispatch_async等函数,按照先进先出(FIFO)顺序追加到Queue中执行处理时,存在两种 Dispatch Queue:
·Serial Dispatch Queue --- 需等待现在正在执行的任务处理结束(串行) 
·Concurrent Dispatch Queue --- 不需等待现在正在执行的任务处理结束(并发)
·Main Dispatch Queue(dispatch_get_main_queue)
a) 主队列,在主线程里执行的队列。因为主线程只有一个,所以 Main Dispatch
Queue属于Serial Dispatch Queue
b) 一切跟UI有关的操作必须放在主线程中执行,所以要追加到Main Dispatch Queue
·Global Dispatch Queue(dispatch_get_global_queue)全局队列,所有应用程序都能够使用的 Concurrent Dispatch Queue
3、GCD的使用
a) 添加任务
·dispatch_async 提交一个异步执行的block块
·dispatch_sync  提交一个同步执行的block块
注意:使用 dispatch_sync 容易引起死锁,慎重使用。比如在主线程里面执行 往主队列里面添加任务的操作就会引起死锁
b) 延迟任务 dispatch_after
·dispatch_after 等待指定的时间后异步的添加一个block块到指定队列里面,不堵塞
当前线程。
c) 一次任务 dispatch_once
·保证dispatch_once中的代码块在应用程序里面只执行一次
d) 设置队列优先级 dispatch_set_target_queue
       DISPATCH_QUEUE_PRIORITY_HIGH 2
       DISPATCH_QUEUE_PRIORITY_DEFAULT 0
       DISPATCH_QUEUE_PRIORITY_LOW (-2)
       DISPATCH_QUEUE_PRIORITY_BACKGROUND
e) 挂起任务 dispatch_suspend
f) 恢复任务 dispatch_resume
g) 多元调用(迭代)
·dispatch_apply 提交一个多元调用的block块到队列里面,并且等待block任务的所
有迭代 完成之后才返回
dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        /*
         <#size_t iterations#>:迭代次数
         queue:迭代的队列
         <#^(size_t)block#>:迭代过程汇总每次要做的事情
         */
        dispatch_apply(array.count, dispatch_get_global_queue(0, 0), ^(size_t i) { //i:迭代的变量
            
            NSNumber *number = array[i];
           
            NSLog(@"%.2f",[number floatValue]);
            
        });

    });
h) 组任务
·dispatch_group_async 监视一组block任务的完成,多个任务都结束后 的一个汇总
处理,可以同步或异步地监视
·dispatch_group_notify 所有任务执行结束汇总,不阻塞当前线程 ·dispatch_group_wait 等待直到所有任务执行结束,中途不能取消,阻塞当前线程
4、NSRunloop的基本概念
·Run Loop 是线程相关的的基础框架的一部分。一个 run loop 就是一个事件处理 的循环,用来不停的调度工作以及处理输入事件。
·线程的生命周期存在五个状态:新建、就绪、运行、阻塞、死亡 ·NSRunLoop可以保持一个线程一直为活动状态,不会马上销毁掉
注意:主线程中的RunLoop默为YES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值