关于Mode首先要知道一个RunLoop 对象中可能包含多个Mode,且每次调用 RunLoop 的主函数时,只能指定其中一个 Mode(CurrentMode)。切换 Mode,需要重新指定一个 Mode 。主要是为了分隔开不同的 Source、Timer、Observer,让它们之间互不影响。
系统默认注册了5个Mode:
-
kCFRunLoopDefaultMode
: App的默认 Mode,通常主线程是在这个 Mode 下运行的。 -
UITrackingRunLoopMode
: 界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响。 -
UIInitializationRunLoopMode
: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用。 -
GSEventReceiveRunLoopMode
: 接受系统事件的内部 Mode,通常用不到。 -
kCFRunLoopCommonModes
: 这是一个占位的 Mode,没有实际作用。
苹果公开提供的Mode有两个:
kCFRunLoopDefaultMode
kCFRunLoopCommonModes
网友评论