MST

星途 面试题库

面试题:Objective-C中RunLoop的模式(Mode)的作用及应用场景

详细说明Objective-C里RunLoop的不同模式(如NSDefaultRunLoopMode、NSRunLoopCommonModes等)各自的作用,以及在实际开发中,在哪些场景下会使用到不同的模式,举例说明。
21.7万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

1. NSDefaultRunLoopMode

  • 作用:默认模式,RunLoop 在大部分情况下都运行在该模式下。在这个模式下,输入源(如端口、自定义输入源)和定时源(NSTimer)能正常工作。
  • 使用场景:日常开发中,没有特别指定 RunLoop 模式时,就处于此模式。例如,应用程序的主线程默认以 NSDefaultRunLoopMode 运行,处理常规的用户交互(如点击、滚动等事件)、定时器触发以及其他常规的任务。

2. NSRunLoopCommonModes

  • 作用:这并不是一个真正的运行循环模式,而是一个占位符集合。NSDefaultRunLoopMode、UITrackingRunLoopMode 等都属于这个集合。将一个输入源或定时源添加到 NSRunLoopCommonModes ,意味着它会在属于“CommonModes”集合的所有模式下都能被处理。
  • 使用场景:比如添加一个 NSTimer ,希望它在界面滚动(UITrackingRunLoopMode)和正常交互(NSDefaultRunLoopMode)等多种常见情况下都能持续运行,就可以将这个 NSTimer 添加到 NSRunLoopCommonModes 中。

3. UITrackingRunLoopMode

  • 作用:专门用于跟踪用户界面交互,在界面滚动等操作时,RunLoop 会切换到这个模式。在此模式下,系统会优化一些操作,例如会降低非关键的定时器频率,以保证界面滚动的流畅性。
  • 使用场景:当用户进行界面滚动操作时,处于此模式。如果一个定时器不希望在界面滚动时执行(避免影响滚动流畅度),就不要将其添加到这个模式下;反之,如果希望某些任务在界面滚动时也能执行,就需要特殊处理,例如添加到 NSRunLoopCommonModes 。

4. GSEventReceiveRunLoopMode

  • 作用:主要用于接收系统事件,处理与系统相关的底层输入事件。应用程序很少直接与之交互,主要由系统框架在幕后使用。
  • 使用场景:系统层面接收和分发事件时使用,例如系统将触摸事件传递给应用程序的窗口,应用开发中一般不需要直接操作此模式。

5. NSModalPanelRunLoopMode

  • 作用:用于模态面板的事件处理。当显示模态面板时,RunLoop 会切换到这个模式,以便专注处理模态面板相关的用户交互。
  • 使用场景:当显示一个模态对话框时,RunLoop 运行在 NSModalPanelRunLoopMode ,在此期间,应用程序只处理与模态面板相关的事件,而不会处理其他常规的用户交互事件,直到模态面板被关闭。