从应用的角度来看,runLoop的作用是保证应用能够一直进行下去,不退出;
从程序的角度看,runLoop是保证其所在的线程不退出
保证线程不退出的方法通常为两种:
1:线程的任务执行不完(死循环)
2:每条线程都有一条runLoop,并且让runLoop运行起来
每条线程的内部都有一个runloop,但是默认都没有开启,在子线程中的runLoop执行完后就会立即释放掉,(底层cpu调度完成之后就释放了)即使使用全局变量对这条子线程进行强引用,,但是强引用只是保证这条线程的OC对象没释放,但是底层cpu调度玩这条线程之后,便不会在线程池中使用了
,一旦开启便会一直运行,
主要有三个部分构成:
observer:主要负责监听事件
source:事件源,分为source0和source1,source0为非系统事件,source1为系统事件
timer:
共有五种模式,分别是:
kCFRynLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
UITrackingRunLoopMode:界面跟踪Mode,用于ScrollView追踪触摸滑动,保证界面滑动时不受其他Mode影响
kCFRunLoopCommonModes:这是一个占位用的Mode,不是一种真正的Mode(包括kCFRynLoopDefaultMode和UITrackingRunLoopMode)
UIInitializationRunLoopMode:在刚启动App时进入的第一个Mode,启动完成后不再使用
GSEventReceiveRunLoopMode:接受系统内核事件的内部Mode,通常用不到