1、RunLoop在实际场景的应用
2、RunLoop内部实现逻辑
3、RunLoop和线程的关系
RunLoop -- 线程
RunLoop和线程是一对一的关系
RunLoop保存在一个全局的字典中,线程是key,RunLoop是value
线程在刚创建的时候没有RunLoop对象,RunLoop会在第一次获取他的时候创建
4、程序中的NSTimer在scrollView滑动的时候可能无法响应怎么解决?
5、RunLoop是怎么响应用户的操作的<比如点击了下屏幕>,具体的流程是啥?
首先是Source1捕捉用户的操作事件,然后Source1将用户的事件包装成事件队列(eventQueue)
然后eventQueue被source0处理
6、RunLoop的几种状态
RunLoop -- CFRunLoopObserverRef
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
kCFRunLoopEntry = (1UL << 0), // 即将进入Loop
kCFRunLoopBeforeTimers = (1UL << 1), // 即将处理Timer
kCFRunLoopBeforeSources = (1UL << 2), // 即将处理Sources
kCFRunLoopBeforeWaiting = (1UL << 5), // 即将进入休眠
kCFRunLoopAfterWaiting = (1UL << 6), // 即将休眠结束
kCFRunLoopExit = (1UL << 7), // 退出Loop
kCFRunLoopAllActivities = 0x0FFFFFFFU // 上面所有的状态
};
7、RunLoop常见的几种模式?模式有啥作用?
1. kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
2. UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
3. UIInitializationRunLoopMode: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用
4. GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常用不到
5. kCFRunLoopCommonModes: 这是一个占位用的Mode,作为标记kCFRunLoopDefaultMode和UITrackingRunLoopMode用,并不是一种真正的Mode
比较常见的是
kCFRunLoopDefaultMode
UITrackingRunLoopMode
模式的作用是用来进行隔离的。
不同组的Source0/Source1/Observers/Timers能够分割开来,互不影响













网友评论