初探Runloop(一)

iOS 的最大特点就是运行时. 保证运行时的就是RunLoop

1.什么是RunLoop呢?

从字面理解就是:运行循环

引用下官方文档的介绍:

A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events.(翻译:运行循环是一个事件处理循环,用于计划工作和协调接收传入事件。)

2.RunLoop 的作用是什么 ?

自我总结如下:

(1) 保证程序一直运行

(2)负责监听事件

(3)负责在一次循环中渲染UI

(4)有event就做 做完或者无事就退朝休息

作为一名开发者,我们有想过在ViewDidLoad里写的代码怎么执行的吗?

就比如一个简单的打印代码 NSLog(@"123456"); 系统就是把代码加到了RunLoop里来保证代码的执行.

3.RunLoop的五种模式(4和5属于系统运行模式,开发几乎用不到

(1) KCFRunLoopDefaultMode:默认 Mode,通常主线程在这个 Mode 下运行。
(2) UITrackingRunLoopMode:(优先切换)UI界面有交互时触发 。 (3)kCFRunLoopCommonModes:在任意 mode 下,发生事件时,commonMode 都会被触发。 
(4) UIInitializationRunLoopMode:刚启动 app 进入的第一个 mode,起到过渡的作用,启动完成后不再使用。
(5)GSEventReceiveRunLoopMode: Graphic 相关事件的 mode。

4.RunLoop 的mode 里面都有什么?

(1)Source

关于Source在官方文档中提到:运行循环从两种不同类型的源接收事件。

①输入源传递异步事件,通常是来自另一个线程或其他应用程序的消息。

②计时器源传递在预定时间或重复间隔发生的同步事件。

(2)Observer

(3)Timer

5.什么时候用RunLoop?

官方建议下面四种情况使用RunLoop:

  • Use ports or custom input sources to communicate with other threads.
    使用端口或自定义输入源与其他线程通信。
  • Use timers on the thread.
    在线程上使用计时器。
  • Use any of the performSelector… methods in a Cocoa application.
    在Cocoa应用程序中使用任何PerformSelector…方法。
  • Keep the thread around to perform periodic tasks.
    保持线程在周围以执行定期任务。
posted @ 2019-03-14 22:03  Love margin  阅读(125)  评论(0编辑  收藏  举报