1

我阅读了有关“Run Loops”主题的“IOS Developer Library”,在文章中,有一句话说“可以递归运行run loop”。我的问题是在哪种情况下应该使用递归运行循环?

我的另一个问题是关于“运行循环的目的是在有工作要做时让你的线程保持忙碌,并在没有工作时让你的线程进入睡眠状态。”这句话。一个run loop怎么能休眠,没有事件来的时候主线程的run loop能休眠吗?第二个线程的情况如何?

我从 Internet 上找到的嵌套运行循环的一个示例如下所示:

 [NSThread detachNewThreadSelector:@selector(runOnNewThread) toTarget:self withObject:nil]; 
 while (!end) {
    NSLog(@”runloop…”);
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    NSLog(@”runloop end.”);
 }

当前线程将被阻塞,直到另一个线程中的工作完成。但是为什么会出现这种情况,当前线程怎么会被阻塞呢?
谁能回答我的问题?

4

1 回答 1

0

也许一个类比是,假设一个运行循环是一个无限的while循环(它基本上是),那么如果你在那个循环中创建了另一个无限的while循环,那么外部的while循环将永远不会再循环,因为内部的循环是无限的,所以什么他们已经做到了,所以当你在另一个循环中进行无限循环时,它会从外部循环中出来,并在它旁边运行(在另一个线程上)

回应您的更新:

肯定会因为while循环没有结束条件而被阻塞

while (!end) {

如果end由另一个线程控制,则该线程必须设置end为 true,然后当前线程才能从此 while 循环继续前进。

这段代码看起来真的很糟糕,它不断重新启动当前的运行循环,可能会破坏它的目的

于 2015-09-04T04:40:08.903 回答