RunLoop四个主要主要组成
Source0
触摸事件处理、performSelector:onThread:
Source1
基于Port的线程间通信、系统事件的捕捉
Timers
NSTimer、performSelector:withObject:afterDelay
Observers
用于监听RunLoop的状态 UI刷新(BeforeWaiting) Autorelease pool(BeforeWaiting)
运行过程
1.通知Observers:进入Loop
2.通知Observers:即将处理Timers
3.通知Observers:即将处理Sources
4.处理Blocks
5.处理Sources0(可能会再次处理Blocks)
6.如果存在Source1,就跳转到第8步
7.通知Observers:开始休眠(等待消息唤醒)
8.通知Observers:结束休眠(被某个消息唤醒)
处理Timer
处理GCD Async To Main Queue
处理Source1
9.处理Blocks
10.根据前面的执行结果,决定如果操作
回到2步
退出Loop
11.通知Observers: 退出Loop