runloop的应用:
1.NSTimer
2.ImageView显示
3.PerformSelector
4.常驻线程
5.自动释放池
一个简单的例子,在子线程中完成一个任务后,子线程就处于消亡。现在要求子线程完成任务后,再重新唤醒子线程。解决办法:考虑使用runloop,使任务永远不能完成,那么子线程就不会销毁。
所以在创建子线程的时候,在任务中添加一个runloop(必须有个timer或者source,runloop才会执行)。
这样,就可以重新在原来的子线程中开启任务了。
总结下:
1.什么是 runloop
运行循环,跑圈。内部就是 do-while循环,在这个循环内部不断的处理各种任务。
2. 一个线程对应一个runloop,主线程的runloop默认已经启动。子线程的需要手动启动(run)
3. runloop只能选择一个mode启动,如果当前的mode中没有任何的source和timer,那么直接退出runloop。
4.自动释放池什么时候释放?
当runloop 即将睡眠的时候销毁之前的释放池,重新创建一个新的
5.observer 可以监听runloop的状态
6.runloop的使用场景:
1.开启一个常驻线程,让一个子线程不进入消亡状态,等待其他线程发来消息,处理其他事件。
1.1.在子线程中开启一个定时器。
1.2在子线程中进行一些长期监控
2.可以控制定时器在特定模式下执行。
3.可以添加observer监听runloop的状态,比如监听点击事件的处理(在所有点击事件之前做一些事情)