线程

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_syncdispatch_barrier_async 的区别?

  • dispatch_barrier_sync:前面的 block 全部添加并执行完成之后,再执行barrier 中的内容。然后再添加并执行之后的 block 内容。会影响主线程的执行。
  • dispatch_barrier_async:将前面的 block 全部添加之后,再添加 barrier,再添加之后的block,然后再依次执行。不影响主线程的执行。
posted @   dulinshun  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示