什么是Runloop
从字面意思来看是运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,如果有Runloop程序会一直运行,并且时时刻刻在等待用户的输入操作.RunLoop可以在需要的时候自己跑起来运行,在没有操作的时候就停下来休息.充分节省CPU资源,提高程序性能
Runloop的作用
1.保持程序的持续运行.程序启动就会开启一个主线程,主线程开启就会跑一个主线程对应的runloop.runloop保证主线程不会被销毁,也保证程序的持续的运行
2.处理app中的各种事件.触摸、定时器、Selector事件
3.节省cpu资源、提高程序的性能.程序运行起立,当什么操作都不需要的时候,runloop就告诉cup,现在没事可做,我可以去休息类.这时cpu就会将资源释放出去做其他的事情,当有事件要做的时候runloop就会立马去做事情
通过上图可以看出,RunLoop在跑圈过程中,当接收到Input sources 或者 Timer sources时就会交给对应的处理方去处理。当没有事件消息传入的时候,RunLoop就休息了
Runloop与线程的关系
1.每一条线程都有唯一一个Runloop与之对应
2.主线程的runloop是自动创建并启动的
3.子线程的runloop需要手动启动
获得RunLoop对象后要调用run方法来启动一个运行循环
// 启动RunLoop
[[NSRunLoop currentRunLoop] run];
RunLoop的其他启动方法
// 第一个参数:指定运行模式
// 第二个参数:指定RunLoop的过期时间,即:到了这个时间后RunLoop就失效了
[[NSRunLoop currentRunLoop] runMode:kCFRunLoopDefaultMode beforeDate:[NSDate distantFuture]];
4.runloop是管理线程的,当线程的runloop开启后,线程会在执行完任务后进去休眠状态,有来新任务就会被唤醒去执行任务
5.runloop在第一个获取是被创建,在线程结束时被销毁