苹果的官方文档有时很难理解,特别是对于非母语人士。这是Anatomy of NSRunLoop的摘录


  运行循环非常像其名称听起来。这是您的线程进入的一个循环,用于响应传入事件而运行事件处理程序。您的代码提供了用于实现运行循环的实际循环部分的控制语句-换句话说,您的代码提供了驱动运行循环的while或for循环。在循环中,您可以使用运行循环对象来“运行”事件处理代码,以接收事件并调用已安装的处理程序。


这使我感到困惑。我的代码从未为非主线程提供whilefor循环。这是什么意思?谁能解释?

最佳答案

继续阅读,直到Using Run Loop Objects和Apple的代码示例确实显示了诸如while循环之类的控制语句。

清单3-1

NSInteger loopCount = 10;
do
{
    // Run the run loop 10 times to let the timer fire.
    [myRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
    loopCount--;
}
while (loopCount);


清单3-2

do
{
    // Start the run loop but return after each source is handled.
    SInt32 result = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, YES);

    // If a source explicitly stopped the run loop, or if there are no
    // sources or timers, go ahead and exit.
    if ((result == kCFRunLoopRunStopped) || (result == kCFRunLoopRunFinished))
        done = YES;

    // Check for any other exit conditions here and set the
    // done variable as needed.
}
while (!done);


使用NSRunLoop的预期方法确实需要您一次又一次调用下一次运行,直到满足特定条件为止。

但是,如果使用-[NSRunLoop run]开始运行循环,它将无限期地运行而无需帮助。这就是主线程的工作。

如果您想知道为什么Apple让(或希望)您控制每个循环,那么在每个CPU周期都需要计数时,NeXTSTEP会在80年代发布。诸如-[NSRunLoop runMode:beforeDate:]之类的功能使您可以微调每次运行的运行循环的频率和行为。

关于ios - 需要解释摘自Apple关于NSRunLoop的文档的摘录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21877573/

10-14 23:44