如图是从苹果官方文档截取下来的RunLoop处理逻辑流程图,
runLoop处理逻辑过程为:1.通知Observer即将进入Loop;
2.通知Observer;即将处理Timer;
3.通知Observer将要处理Source0
4.处理Source0
5.如果有Source1,跳到第9步
6.通知Observer,线程即将休眠
7.休眠,等待唤醒
8.通知Observer,线程刚被唤醒
9.处理唤醒时收到的消息,之后跳回2
10.通知Observer即将退出Loop
二、与RunLoop有关的面试题
1.什么是RunLoop?
答:字面意思为运行循环,其实内部就是do-while循环,在这个循环内部不断处理各种任务 (比如触摸事件、定时器事件、@selector()事件、observer) 。一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop需要手动启动(调用run方法)
2.自动释放池什么时候释放
答:通过Observer监听RunLoop的状态