我在文章中读到了关于“运行循环”主题的“IOS开发者库”,其中一句话说“可以递归运行一个运行循环”。我的问题是在哪种情况下应该使用递归运行循环?
我的另一个问题是关于语句“运行循环的目的是在有工作时保持线程忙,并在没有线程时让线程进入休眠状态。”运行循环如何睡眠,主线程的运行循环可以在没有事件发生时进入休眠状态?第二个线程的情况怎么样?
我从Internet上找到的嵌套运行循环的一个例子是 下面:
[NSThread detachNewThreadSelector:@selector(runOnNewThread) toTarget:self withObject:nil];
while (!end) {
NSLog(@”runloop…”);
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
NSLog(@”runloop end.”);
}
当前线程将被阻塞,直到另一个线程中的工作完成。但为什么会发生这种情况,如何阻止当前线程呢? 谁能回答我的问题?
答案 0 :(得分:0)
也许比喻一下,假装一个运行循环是一个无限循环(它基本上就是这个),然后如果你在那个循环里面做了另一个无限循环,那么外部while循环永远不会再循环,因为内部循环是无限的,所以他们所做的就是这样做,当你在另一个环中制作一个无限的循环时,它会转出外部的一个,并在它旁边运行(在另一个线程上)
响应您的更新:
肯定会被阻止,除了while循环没有结束条件
while (!end) {
如果从另一个线程控制end
,那么该线程必须将end
设置为true才能使当前线程从此while循环开始。
这段代码看起来真的很糟糕,它不断重启当前的runloop,可能会打败它的目的