RunLoop

2020-07-24  本文已影响0人  Oh丶Really

一、概念

事件循环:

系统调用相关指令如开关机等是在内核态的,程序一般运行在用户态的,绝大部分API都是用户态的
image

二、数据结构

NSRunLoop 是 CFRunLoop 的封装,提供了面相对象的API,其数据结构如下:

1、CFRunLoop

包含以下内容:

2、CFRunLoopMode

3、CFRunLoopSource

4、CFRunLoopTimer

5、CFRunLoopObserver

观测时间点:

各个数据结构之间的关系

一对多的关系:


image

RunLoop的Mode:

问题:怎样将Timer同时添加到两个mode?以保证mode切换的时候,不影响timer的使用
image
解决 :NSRunLoopCommonModes
NSRunLoopCommonModes的特殊性

三、事件循环机制

image
APP运行生命周期内RunLoop的整体事件循环机制

RunLoop的核心

image

四、RunLoop 与 NSTimer

问题:滑动 TableView 时,定时器还会生效吗?
回答:不会生效,timer 默认加入到 defaultMode 中,滑动的时候,Mode 会从 kCFRunLoopDefaultMode 切换到 UITrackingRunLoopMode,不同的 Mode ,timer 不相关,所以不生效
解决:添加到 kCFRunLoopCommonMode 中

五、RunLoop 与多线程

怎样实现一个常驻线程

代码实现:

运行的模式和资源添加的模式一定要是同一个
image
image

总结

上一篇下一篇

猜你喜欢

热点阅读