我阅读了"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循环继续前进。
这段代码看起来真的很糟糕,它一直在重新启动当前的运行循环,可能违背了它的目的