在IOS中,什么时候我们应该递归地使用run loop



我阅读了"IOS Developer Library"关于"Run Loops"主题的文章,在文章中,有一句话说"It is possible to Run loop递归运行"。我的问题是在哪种情况下应该使用递归运行循环?

我的另一个问题是关于语句"运行循环的目的是让你的线程在有工作要做的时候保持忙碌,在没有工作的时候让你的线程进入睡眠状态。"如何运行循环睡眠,主线程的运行循环睡眠时,没有事件来?那么第二个线程的情况呢?

我在网上找到的嵌套运行循环的一个例子是这样的下图:

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

当前线程将被阻塞,直到另一个线程的工作完成。但是为什么会发生这种情况,当前线程是如何被阻塞的?
有人能回答我的问题吗?

可以打个比方,假设一个run循环是一个无限while循环(它基本上就是),那么如果你在这个循环中再创建一个无限while循环,外部while循环就不会再循环了因为内部循环是无限的,所以他们所做的就是这样当你在另一个线程中创建一个无限while循环时,它会从外部循环中出来,并在它旁边运行(在另一个线程上)

响应您的更新:

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

while (!end) {

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

这段代码看起来真的很糟糕,它一直在重新启动当前的运行循环,可能违背了它的目的

相关内容

  • 没有找到相关文章

最新更新