runloop是一个运行循环,是用来管理线程的。如果没有线程的话,runloop也就没有存在的必要. 程序一启动就会开启一个主线程,主线程开完后就会跑起来一个跟主线程对应的runloop,runloop能保证主线程在程序运行期间不被销毁,线程会处于 “接收消息 -> 处理->等待”这个循环中,这个就是runloop保证的,保证线程在执行完任务后,便进入休眠状态,不会退出,随时等待新任务。
runloop与线程的关系
- 每条线程都有唯一个的一个与之对应的线程
- 主线程的runloop系统默认启动,子线程的runloop需要主动开启
runloop使用的时候
开发中最常用的使用的困惑的地方,就是添加NSTimer的时候和scrollView的滚动不能共存的问题,因为runloop只能支持一种mode,当我们滚动的时候,runloop会自动切换到UITrackingRunLoopMode模式,定时器就停止了相应。解决办法有两种