iOS RunLoop

62 阅读1分钟

210924144U64526-0-lp.jpg 本文主要梳理iOS RunLoop 核心知识

  1. 概念
  2. 数据结构
  3. 事件循环机制
  4. RunLoop与NSTimer
  5. RunLoop与多线程

概念

RunLoop是通过内部维护的事件循环来对 事件/消息 进行管理的一个对象。 image.png

事件循环的效果

1.没有消息需要处理时,休眠以避免资源占用。

2.有消息需要处理时,立刻被唤醒。

3.用户态/内核态 切换。

数据结构

image.png

事件循环机制

image.png

image.png

RunLoop与NSTimer

出现的场景 滑动tableview的时候定时器是否还会生效 : 不会

原因: UITrackingRunLoopMode kCFRunLoopDefaultMode

解决方案: void CFRunLoopAddTimer(runLoop,timer,commonMode)

RunLoop与多线程关系

1.通过数据结构了解:线程是和RunLoop一一对应的

2.自己创建的线程默认是没有RunLoop的

如何实现一个常驻线程

为当前线程开辟一个RunLoop 向该RunLoop中添加一个Port/Source 等维持RunLoop的事件循环 启动该RunLoop