RunLoop简介
运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,如果有Runloop程序就会一直运行,并且时时刻刻在等待用户的输入操作。
RunLoop可以在需要的时候自己跑起来运行,在没有操作的试试就停下来休息。充分节省CPU资源,提高程序性能。
RunLoop基本作用
1.保持程序持续运行 程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunLoop保证主线程不会被销毁,也就保证了程序的持续运行;
2.处理App中的各种事件 比如定时器事件,触摸事件,Selector事件;
3.节省CPU资源,提高程序性能 程序运行起来时,当什么操作都没有做的时候,Runloop就会告诉CPU,现在没有事情做,我要去休息,这时CPU就会将其资源释放出来去做其他的事情,当有事情做的时候Runloop就会立马起来去做事情。
RunLoop内部运行原理:
RunLoop和线程之间的关系
1.每条线程都有唯一的一个与之对应的RunLoop对象;
2.RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value;
3.主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建;
4.RunLoop在第一次获取时创建,在线程结束时销毁。
RunLoop启动流程
UIApplicationMain函数内启动了RunLoop,程序不会马上退出,二是保持运行状态。 因此每一个应用必须要有一个RunLoop,我们值得主线程一开起来,就会跑一个和主线程对应的RunLoop,那么RunLoop一定在程序的入口main函数中开启。
我们看一下UIApplicationMain的API