Ios CFRunloopRun()和简单无限循环之间的区别?

Ios CFRunloopRun()和简单无限循环之间的区别?,ios,objective-c,macos,runloop,Ios,Objective C,Macos,Runloop,我在当前运行循环上安排了一个HIDManager,它是main函数的运行循环 当我添加以下行时 CFRunLoopRun() 将捕获所有HID事件,并在屏幕上显示输出,这与Runloop模型兼容 但如果我加上 (;;)的 根据我的理解,在主循环结束时,我还可以保持这个runloop的存在,线程永远不会消亡。为什么我现在无法接收任何HID事件而屏幕上没有打印任何内容?CFRunLoopRun()的工作原理与简单的无限循环不同,因为它暂停程序的执行并等待新事件的到来,可能是定时器触发、HID事件等

我在当前运行循环上安排了一个
HIDManager
,它是
main
函数的运行循环

当我添加以下行时

CFRunLoopRun()

将捕获所有HID事件,并在屏幕上显示输出,这与Runloop模型兼容

但如果我加上

(;;)的

根据我的理解,在主循环结束时,我还可以保持这个runloop的存在,线程永远不会消亡。为什么我现在无法接收任何HID事件而屏幕上没有打印任何内容?

CFRunLoopRun()
的工作原理与简单的无限循环不同,因为它暂停程序的执行并等待新事件的到来,可能是定时器触发、HID事件等。当您调用
CFRunLoopRun()
时,您会注意到,只要没有新事件出现,程序的CPU使用率就会降至零


通过在运行循环所在的线程内运行无限循环,您的程序正忙于运行无限循环,没有时间处理新事件。

因此,有一个队列来接收任务,有一个信号量来“等待”,除非任务中有什么东西,否则会有或多或少相同的效果吗?我想这会有类似的效果。由于CoreFoundation是开源的,因此您可以看到其实现