一、__CFRunLoopRun源码简略如下:
static int32_t __CFRunLoopRun(CFRunLoopRef rl, CFRunLoopModeRef rlm, CFTimeInterval seconds, Boolean stopAfterHandle, CFRunLoopModeRef previousMode) {
int32_t retVal = 0;//默认值
do {
/** 此处为处理:source、observer、timer、block的逻辑 ***/
} while (0 == retVal);
return retVal;
}
二、结论如下:
当runloop运行起来时,至少做一次source、observer、timer、block的检查、执行--换句话说:runloop至少执行一次。
当下网络上流行说法:当runloop中未注册source、observer、timer、block时,runloop运行起来直接退出。
因此此流行说法是不正确的!!!。
本文解析了__CFRunLoopRun源码,揭示了RunLoop至少执行一次source、observer、timer、block检查的机制,纠正了网络上关于RunLoop运行逻辑的误解。
2894

被折叠的 条评论
为什么被折叠?



