iOS 的 RunLoop 知识?

在 RunLoop 循环中,有一项是处理 blocks,这个 blocks 里面包含什么?

回答·2
最热
最新
  • 通过调用 Api CFrunloopPerformBlock,传入 Runloop,mode,block 参数,当 Runloop 执行到特定时机时,便会调用该 Block
  • CoreFoundation 的 CFRunloop.h 文件有个 api,即: void CFRunLoopPerformBlock(CFRunLoopRef rl,CFTypeRef mode,  void (^block)(void)), Runloop 循环内部执行的__CFRunLoopDoBlocks 函数经过调用__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__,最终会执行最上面所传入的 block。 RunLoop 执行流程: 1.通知 Observers 进入 Runloop; 2.通知 Observers 即将处理 Timers; 3.通知 Observers 即将处理 Source0; 4.处理 Blocks; 5.处理 Source0(可能会再次处理 Blocks); 6.如果存在 Source1,就跳转至第 8 步; 7.通知 Observers 开始休眠; 8.通知 Observers 结束休眠,处理 Timers,处理 gcd Async to main queue,处理 source1; 9.处理 blocks; 10.根据之前的结果决定回到步骤 2 或者退出循环; 11.通知 Observers 退出 loop。 纯手敲😆