1.什么是RunLoop?
(1)运行循环
(2)在程序运行过程只能够循环做一些事情
RunLoop的应用范畴?
(1)定时器,performSelector
(2) GCD Async Main Queue
(3)事件响应,手势识别,界面刷新
(4)网络请求
(5)AutoreleasePool
3.RunLoop的作用?
(1)程序并不会马上退出,而是保持运行状态
(2)保证程序的持续运行
(3)处理APP中的各种事件(比如触摸事件,定时器事件等)
(4)节省CPU资源,提高程序性能:该做事时做事,该休息时休息
4.RunLoop的内部实现逻辑?
image.png5.RunLoop和线程的关系?
(1)每一条线程都有唯一的一个与之对应的RunLoop对象
(2)RunLoop对象保存在全局的Dictionary里,线程作为key,RunLoop作为Value
(3)线程刚创建的时并没有RunLoop对象,RunLoop对象会在第一次获取它的时候创建
(4)RunLoop会在线程结束时销毁
(5)主线程的RunLoop已经自动获取(创建),子线程默认没有开启RunLoop
6.timer和RunLoop的关系?
image.png7.RunLoop的mode作用是什么?
(1)一个RunLoop包含若干个Mode,每个Mode又包含若干个Source0/Source1/Timer/Observer
(2)RunLoop启东时只能选择其中一个Mode,作为currentMode
(3)如果需要切换Mode,只能退出当前Loop,再重新选择一个Mode进入
(4)不同组的Source0/Source1/Timer/Observe能分隔开来,互不影响
(5)如果Mode里没有任何Source0/Source1/Timer/Observe,Runloop就会立马停止
(5)CFRunLoopModeRef常见的2种
kCCFRunLoopDefaultMode(NSDefaultRunLoopMode):APP的默认Mode,通常主线程是在这个Mode下运行
(5)UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode的影响
网友评论