为什么 RunLoop 不会阻塞整个线程执行?
Why RunLoop doesn't block the whole thread from executing?
如果每个UIApplication
在主线程上初始化一个这样的RunLoop
void CFRunLoopRun(void) { /* DOES CALLOUT */
int32_t result;
do {
result = CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false);
CHECK_FOR_FORK();
} while (kCFRunLoopRunStopped != result && kCFRunLoopRunFinished != result);
}
既然是无限循环,为什么不阻塞整个执行?无限循环和我在主线程上的代码如何在没有上下文切换的情况下在单个线程上协同工作?
它确实阻塞了当前线程。但是,CFRunLoopRunSpecific
所做的部分工作是在该线程上调用您的代码。当您 return 时,它会返回到 CFRunLoopRunSpecific
,然后调用其他代码。
如果每个UIApplication
在主线程上初始化一个这样的RunLoop
void CFRunLoopRun(void) { /* DOES CALLOUT */
int32_t result;
do {
result = CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false);
CHECK_FOR_FORK();
} while (kCFRunLoopRunStopped != result && kCFRunLoopRunFinished != result);
}
既然是无限循环,为什么不阻塞整个执行?无限循环和我在主线程上的代码如何在没有上下文切换的情况下在单个线程上协同工作?
它确实阻塞了当前线程。但是,CFRunLoopRunSpecific
所做的部分工作是在该线程上调用您的代码。当您 return 时,它会返回到 CFRunLoopRunSpecific
,然后调用其他代码。