美文网首页
iOS 阻塞函数的使用

iOS 阻塞函数的使用

作者: 最强的小强 | 来源:发表于2020-01-11 17:37 被阅读0次

需求:要在某个网络请求或者使用CALayer绘制之后再做处理操作

举个栗子🌰:
// 正常情况下不作任何处理,在第1行代码里面的绘制操作(假如有...)还没有完成就会执行第2行代码,导致后面的代码先执行,可能造成无数据显示
 self.staveView.rowArray = [StaveJsonManager staveRowModelArrayWithJSONString:self.questionModel.score_data];
 NSLog(@"操作1");
解决方案1:
// 使用同步栅栏函数,这样在绘制完成之前是不会执行后面的代码的,完成了需求
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
dispatch_barrier_sync(_queue, ^{
    NSLog(@"操作1");
    self.staveView.rowArray = [StaveJsonManager staveRowModelArrayWithJSONString:self.questionModel.score_data];
 });
NSLog(@"操作2");
写在后面(总结):
  1. 同步栅格函数dispatch_barrier_sync会等函数体内的任务执行完毕后,才会继续执行下面的代码;
  2. 异步栅格函数dispatch_barrier_async不会等函数体内的任务执行完毕,会顺序执行下面的代码;
解决方案2:
// 使用 CFRunLoopRef函数
CFRunLoopRef ref = CFRunLoopGetCurrent();//获取线程runloop
self.staveView.rowArray = [StaveJsonManager staveRowModelArrayWithJSONString:self.questionModel.score_data];
CFRunLoopRun();//调用runloop阻塞
CFRunLoopStop(ref);//取消阻塞

相关文章

  • iOS 阻塞函数的使用

    需求:要在某个网络请求或者使用CALayer绘制之后再做处理操作 举个栗子?: 解决方案1: 写在后面(总结):同...

  • node 阻塞和非阻塞

    阻塞处理 非阻塞处理 使用回调函数可以防止node.js在运行时一个函数执行时等待上一个函数执行完 所要花费的不必要时间

  • select()的阻塞机制

    select函数与阻塞socket/非阻塞socket没有半毛钱的关系。select函数本身是阻塞的(与s...

  • linux中select监听多路串口数据

    串口读函数read是阻塞函数,多路串口接收不太好处理,如果每路串口使用单独的线程接收浪费资源,使用select()...

  • 2018-03-28

    将回调函数和setTimesout()结合起来使用去解决代码阻塞问题

  • GCD栅栏函数, 快速迭代和调度组的使用

    今天介绍几个比较重要的GCD函数: GCD栅栏函数: 同步栅栏函数: 会发生阻塞 异步栅栏函数: 不会发生阻塞 栅...

  • ios多线程操作— GCD延迟操作和相关使用方法

    ios多线程操作— GCD延迟操作和相关使用方法 0x01.iOS版本 使用GCD函数可以进行延时操作,该函数为 ...

  • 线程锁

    探讨iOS开发中各种锁使用NSCondition实现多线程同步 NSCondition是线程同步, 阻塞线程。 取...

  • socket

    socket connect阻塞和非阻塞处理 定义信号处理函数

  • iOS的旋转

    iOS中的旋转函数CGAffineTransformMakeRotation(angle); 这里的angle使用...

网友评论

      本文标题:iOS 阻塞函数的使用

      本文链接:https://www.haomeiwen.com/subject/mapsactx.html