我们什么时候应该在IOS中递归使用运行循环?

时间:2015-09-04 02:38:00

标签: ios runloop

我在文章中读到了关于“运行循环”主题的“IOS开发者库”,其中一句话说“可以递归运行一个运行循环”。我的问题是在哪种情况下应该使用递归运行循环?

我的另一个问题是关于语句“运行循环的目的是在有工作时保持线程忙,并在没有线程时让线程进入休眠状态。”运行循环如何睡眠,主线程的运行循环可以在没有事件发生时进入休眠状态?第二个线程的情况怎么样?

我从Internet上找到的嵌套运行循环的一个例子是 下面:

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

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

1 个答案:

答案 0 :(得分:0)

也许比喻一下,假装一个运行循环是一个无限循环(它基本上就是这个),然后如果你在那个循环里面做了另一个无限循环,那么外部while循环永远不会再循环,因为内部循环是无限的,所以他们所做的就是这样做,当你在另一个环中制作一个无限的循环时,它会转出外部的一个,并在它旁边运行(在另一个线程上)

响应您的更新:

肯定会被阻止,除了while循环没有结束条件

while (!end) {

如果从另一个线程控制end,那么该线程必须将end设置为true才能使当前线程从此while循环开始。

这段代码看起来真的很糟糕,它不断重启当前的runloop,可能会打败它的目的