什么是RunLoop
- 从字面意思看,运行循环,转圈
- 从内部看就是一个高级的do-while循环,这个循环不断地处理各种任务(比如Source\timer\Observer)
- 一个线程对应一个RunLoop,主线程的RunLoop默认已经启动,子线程的RunLoop得手动启动(调用run的方法)
RunLoop只能选择一个Mode启动,如果当前Mode中没有任何Source\Timer\Observer,那么就直接退出RunLoop
自动释放池什么时候释放
- 在RunLoop睡眠之前释放(KCFRunLoopBeforeWaiting)
开发中如何使用RunLoop?什么应用场景
- 开启一个常驻线程(让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件)
- 在我们子线程中长期监控一个行为
-- 在子线程中开启一个定时器
- 可以控制定时器在特定模式下执行
- 可以让某些事件(行为\任务)在特定模式下执行