1.解释
运行循环是与线程关联的基础结构的一部分。运行循环是一个事件处理循环,用于调度工作并协调接收传入事件。
2.目的
在有工作要做的时候让线程保持忙碌,在没有工作的时候让线程休眠。
3.管理
运行循环管理不是完全自动的。您仍然必须设计线程的代码,以便在适当的时间启动运行循环并响应传入的事件。Cocoa和Core Foundation都提供运行循环对象来帮助您配置和管理线程的运行循环。应用程序不需要显式地创建这些对象;每个线程(包括应用程序的主线程)都有一个关联的运行循环对象。但是,只有辅助线程需要显式地运行它们的运行循环。作为应用程序启动过程的一部分,应用程序框架自动设置并运行主线程上的运行循环。
4.作用
- (1)保持程序的持续运行(如:程序一启动就会开启一个主线程(中的 runloop 是自动创建并运行),runloop 保证主线程不会被销毁,也就保证了程序的持续运行)。
- (2)处理App中的各种事件(如:touches 触摸事件、NSTimer 定时器事件、Selector事件(选择器 performSelector))。
- (3)节省CPU资源,提高程序性能(有事情就做事情,没事情就休息 (其资源释放))。
- (4)负责渲染屏幕上的所有UI。
5.接收事件
运行循环从两种不同类型的源接收事件。
- (1)输入源提供异步事件,通常来自另一个线程或不同应用程序的消息。
- (2)计时器源交付同步事件,发生在预定的时间或重复的间隔。
这两种源代码都使用特定于应用程序的处理程序例程来处理事件。
6.Run Loop Modes
Run loop modes 是要监视的输入源和计时器的集合,以及要通知的运行循环观察器的集合。每次运行运行循环时,都指定(显式或隐式)运行的特定“模式”。在运行循环的传递过程中,仅监视与该模式关联的源并允许其传递其事件。(类似地,只有与该模式相关联的观察者被通知运行循环的进度。)与其他模式相关联的源保持任何新事件,直到后续以适当模式通过循环。
公开的mode有两个,分别是NSDefaultRunLoopMode和NSRunLoopCommonModes。