![](https://img.haomeiwen.com/i7205173/cc73d69d7d7f2553.png)
![](https://img.haomeiwen.com/i7205173/437e4739f903a8cd.png)
![](https://img.haomeiwen.com/i7205173/44f8a47390eb23b3.png)
![](https://img.haomeiwen.com/i7205173/30430a4fd8f67025.png)
![](https://img.haomeiwen.com/i7205173/ade1482c7b6b4ec1.png)
![](https://img.haomeiwen.com/i7205173/0f49ac0e6ac017e1.png)
![](https://img.haomeiwen.com/i7205173/9fc24e80c13471c8.png)
![](https://img.haomeiwen.com/i7205173/2217620df09496df.png)
![](https://img.haomeiwen.com/i7205173/fc188d66a075f28f.png)
![](https://img.haomeiwen.com/i7205173/1ac627f843e30c82.png)
runloop休眠,可以看作是线程阻塞,不会继续往下走(就是卡在休眠的那一行代码)。一旦休眠,
代表当前线程就不再做事情了,cpu就不给当前线程分配资源了,
![](https://img.haomeiwen.com/i7205173/c9535d671fc4cd4c.png)
runloop是怎么响应用户操作的:首先是由source1来把系统事件捕捉,相当于你一点击屏幕的话,
这个事件是在source1里面去处理的,相当于它是个source1事件。source1又会把这个事件包装成事件队列
事件队列又是在source0里面处理的,所以是先由source1捕捉,放到source0里面去处理的
![](https://img.haomeiwen.com/i7205173/07d8697bd18e491d.png)
_commonModes模式下运行工作的东西会放到CFMutableSetRef _commonModeItems里面去,比如上图的
timer。timer本来存在对应的mode下面的(因为每个模式都有自己timer),但是一旦运行到NSRunLoopCommonModes下面,就会放到
CFMutableSetRef _commonModeItems里面去。source0 ,source1也一样。
网友评论