跳到主要内容

简述RunLoop有哪些 Mode 呢?滑动时发现定时器没有回调,是因为什么原因呢? ?

参考答案:

RunLoop是iOS开发中的一个重要概念,用于处理事件循环,包括输入事件、定时器事件、性能监控等。它有多种模式,每种模式都有其特定的用途和上下文。

RunLoop的主要模式包括:

  1. Default模式(NSDefaultRunLoopMode):这是大多数工作中默认的运行方式。App在平时所处的状态通常就是这种模式。
  2. Connection模式:这个模式主要用于处理网络连接相关的事件。
  3. Modal模式(NSModalPanelRunLoopMode):这种模式在Model Panel情况下使用,用于区分事件,主要在OS X开发中遇到。
  4. Event tracking模式(UITrackingRunLoopMode):这个模式用于跟踪来自用户交互的事件,比如UITableView的上下滑动。当ScrollView在滑动时,RunLoop会切换到这个模式。
  5. Common模式(NSRunLoopCommonModes):这是一个特殊的模式,它实际上是一组run loop mode的集合。它允许定时器和其他源在多个模式下运行,而不需要为每个模式单独设置。

关于滑动时发现定时器没有回调的问题,这通常是由于RunLoop在滑动时切换了模式。当ScrollView正在滑动时,RunLoop会从Default模式切换到Event tracking模式。由于定时器通常只在Default模式下被调度,因此在切换到Event tracking模式后,定时器将不再被触发,从而导致回调不执行。

为了解决这个问题,你可以将定时器添加到Common模式中。由于Common模式包含了Default模式和Event tracking模式,定时器将在两种模式下都被调度,从而确保在滑动时也能正常触发回调。

总结来说,RunLoop的有多种模式,每种模式都有其特定的用途。滑动时发现定时器没有回调的原因是因为RunLoop在滑动时切换了模式,导致定时器不再被调度。通过将定时器添加到Common模式,可以解决这个问题。