RunLoop是什么?
RunLoop是一个事件循环,让线程休眠和线程保活成为了可能,线程休眠可以节省CPU资源;
RunLoop处理消息的流程是“接收消息->恢复活跃->处理消息->进入休眠”。
一个RunLoop包含了多个Mode,每个Mode又包含了若干个Source/Timer/Observer。每次调用 RunLoop的主函数时,只能指定其中一个Mode,这个Mode被称作CurrentMode。如果需要切换 Mode,只能退出Loop,再重新指定一个Mode进入。这样做主要是为了分隔开不同Mode中的Source/Timer/Observer,让其互不影响。
RunLoop怎么用?
1.NSTimer中底层用到了RunLoop。
2.Autorelerasepool也是用了RunLoop的原理进行内存的回收
3.创建NSTimer的时候,也是用到了RunLoop,performSelecter:afterDelay使用时。
4.事件的交互,触摸屏幕或者硬件的交互,也用到了RunLoop。
5.UI界面刷新。
6.调用了dispatch_async(dispatch_get_main_queue(), block)时,主队列会把该 block 放到对应的线程(恰好是主线程)中,主线程的 RunLoop 会被唤醒。
7.AFNetWorking 3.0以前的线程保活。
8.可以用来监控系统卡顿。
网友评论