ios - NSRunLoop 实现

标签 ios objective-c nsrunloop

我对 NSRunLoop 的实现很感兴趣,它可以在不占用大量 CPU 的情况下让线程空闲/休眠。这在 Objective-c 中是如何实现的?消耗高 CPU 的简单解决方案是 while(YES) {...}

最佳答案

一般来说,有很多系统调用会阻塞。也就是说,它们将导致内核挂起线程并且不给它 CPU 时间,直到发生某些特定事件或状态更改。诸如 kevent()poll()select()read() 之类的非纯文本-文件描述符等

关于 NSRunLoop 具体来说,它是围绕 CFRunLoop 构建的,它是开源的:https://www.opensource.apple.com/source/CF/CF-855.11/CFRunLoop.c .它在 OS X 和 iOS 上使用 Mach API。特别是,它会调用 mach_msg() 来等待输入源(以 Mach 端口的形式)触发(接收消息)或计时器结束。

关于ios - NSRunLoop 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167551/

相关文章:

iphone - UITableViewCellAccessoryCheckmark的逻辑

objective-c - 了解 Objective-C 中选择器的唯一性

objective-c - 不同 runLoop 上的 HID 报告回调

ios - NSNotificationCenter 使用了多少内存

ios - 如何在 Swift 中循环 mapView.Annotations?

ios - 按下按钮后记录时数据 (char*) 出现损坏

ios - NSStrikethroughStyleAttributeName , 如何在 iOS 10.3 中删除字符串?

objective-c - NSTimer:释放时是否调用了invalidate?

ios - 我如何在另一个线程的运行循环中安排时间?

c++ - 是否可以从 C++ header 构建 Objective-C++ 实现?