美文网首页
RunLoop的概念和使用

RunLoop的概念和使用

作者: 奋斗吧程序员 | 来源:发表于2024-01-23 12:59 被阅读0次

1.本质:

死循环

监听机制

事件的传递链和响应链

消息机制

2.作用:

保持程序一直运行不退出

监听所有事件(触摸、定时器、selector),有任务就处理,无任务就休眠等待事件唤醒

3.常用的mode:

NSDfaultRunLoopMode:默认模式

NSTrackingRunLoopMode:优先级高,只有触摸时才会监听该模式,同时在主线程中,会停止监听default模式,一旦停止触摸则结束监听该模式并切换为default模式

NSRunLoopCommonModes:占位模式,在Default和Tracking模式中添加事件,实现触摸时不会停止定时器事件

4.runloop与线程关系:

每一个线程都有一个runloop对象

主线程自动创建runloop对象并启动

子线程需手动创建runloop对象和启动

主线程的runloop和子线程的runloop互不影响

runloop的生命周期从第一次创建开始,到线程结束销毁

5.保持线程常驻

self.thread = []; //创建线程

NSRunLoop *runloop = [NSRunLoop currentRunLoop]; //创建当前线程控制的runloop

[runloop addport: [NSMachPort port] forMode:NSDfaultRunLoopMode]; //添加端口到的runloop

[runloop run];  //手动启动runloop

performSelector:onThread:self.thread withObject:waitUntilDone: //启动线程

6.使用场景

后台播放音乐:通过常驻线程实现

滚动scrollview和定时器事件互不影响:通过将timer添加到tracking模式下实现,如果定时器有耗时操作,则将timer添加到子线程控制的runloop中的default模式下实现。

7.唤醒runloop条件

timer、source1、手动唤醒、处于超时状态(先唤醒然后退出)

8.监听的事件源

input sources:处理异步消息。如port、customer、selector

timer sources:处理同步消息。如定时器、触摸

9.推出runloop方式

[runloop run];//一直运行,直到处理所有事件源时退出

[runloop runUntilDate:];//超时退出

[runloop runMode: beforeDate:];//会运行一次,超时或者事件源处理完毕会退出

相关文章

网友评论

      本文标题:RunLoop的概念和使用

      本文链接:https://www.haomeiwen.com/subject/oawuodtx.html