1

NSRunLoop 和 CFRunLoop 中有方法,要运行到特定时间 CFRunLoopInMode 和 NSRunLoop - runUntillDateT

这些方法指定运行的时间,直到。

但是,我想处理 runLoop 中的所有消息,如果它完成并且空闲则退出。因为一些 runLoop 源可以有无限的时间来处理。所以,我不能说时间。

4

1 回答 1

5

您可以使用CFRunLoopRunInMode一次来运行事件循环,它会告诉您它是否处理了任何源。所以你可以尝试这样的事情:

while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, 1) == kCFRunLoopRunHandledSource) {
    // nothing
}

您可以尝试的另一种方法是CFRunLoopObserver使用. 这个观察者将在运行循环进入睡眠等待源或计时器触发之前被调用。在观察者的标注中,您可以简单地调用.activitieskCFRunLoopBeforeWaitingCFRunLoopStop(CFRunLoopGetCurrent())

于 2012-02-15T08:29:34.647 回答