zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS 什么是RunLoop?

ios 什么
2023-09-14 09:04:14 时间

返回上级目录:iOS面试专题一

什么是RunLoop,RunLoop的实现机制是怎样的?
如何实现一个常驻线程?

1.什么是RunLoop?

  • RunLoop是通过内部维护的事件循环来对事件/消息进行管理的一个对象

在这里插入图片描述

1.1 什么是事件循环?Event Loop

  • 没有消息需要处理时,休眠以避免资源占用
  • 有消息需要处理时,立刻被唤醒
  • 维护的事件循环可以用来不断的处理消息或者说事件,然后对他们进行管理。同时当没有消息需要处理时,会发生从用户态到内核态的切换。由此可以进行当前线程的休眠,避免资源占用。当有消息需要处理时会发生从内核态到用户态的切换,当前的用户线程会被唤醒。

  • 用户态和内核态:计算机合理的进行资源的调度,内核态有系统调用,陷阱指令,包括开机关机的一些操作。如果每一个用户进程都可以促使用户手机关机或是中断,这是无法想象的。所以要有用户态和内核态的区分。内核态可以对用户态中的线程进行一些调度

在这里插入图片描述

1.2 我们的main函数为什么能保持不退出?

  • main函数中有一个运行循环,runloop
  • 接收消息:点击事件,滑动列表,处理网络事件的返回
  • 在main函数中所调用的UIApplicationMain()函数内部会启动主线程的runloop,而runloop是对事件循环的一种维护机制,可以做到有事做的时候做事,没有事情做的时候通过从用户态到内核态的切换,从而避免资源的占用,使当前线程处于休眠状态

在这里插入图片描述