线程
1. iOS 中有多少类型的线程?
- PThread:跨系统,对C语言的封装。很少使用,不推荐使用。
- NSThread:面向对象,需要手动管理生命周期。
- GCD:Grand Central Dispatch,主打任务与队列。
- NSOperation & NSOperationQueue:基于GCD的封装,面向对象。
2. GCD 有那些队列,默认提供那些队列?
- 主队列:dispatch_get_main_queue
- 全局并发队列:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
- 自定义队列:dispatch_queue_create("队列名字", DISPATCH_QUEUE_SERIAL)
3. GCD 栅栏函数
栅栏函数用来处理多读单写事件,使用如下:
dispatch_queue_t queue = dispatch_queue_create("testqueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"----1-----%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"----2-----%@", [NSThread currentThread]);
});
dispatch_barrier_async(queue, ^{
NSLog(@"----barrier-----%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"----3-----%@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
NSLog(@"----4-----%@", [NSThread currentThread]);
});
注意:栅栏函数使用时,不能使用全局队列,只能使用自定义的队列。
3.1 dispatch_barrier_sync
和 dispatch_barrier_async
的区别?
- dispatch_barrier_sync:前面的 block 全部添加并执行完成之后,再执行barrier 中的内容。然后再添加并执行之后的 block 内容。会影响主线程的执行。
- dispatch_barrier_async:将前面的 block 全部添加之后,再添加 barrier,再添加之后的block,然后再依次执行。不影响主线程的执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!