苹果的官方文档有时很难理解,特别是对于非母语人士。这是Anatomy of NSRunLoop的摘录
运行循环非常像其名称听起来。这是您的线程进入的一个循环,用于响应传入事件而运行事件处理程序。您的代码提供了用于实现运行循环的实际循环部分的控制语句-换句话说,您的代码提供了驱动运行循环的while或for循环。在循环中,您可以使用运行循环对象来“运行”事件处理代码,以接收事件并调用已安装的处理程序。
这使我感到困惑。我的代码从未为非主线程提供while
或for
循环。这是什么意思?谁能解释?
最佳答案
继续阅读,直到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/