- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_async(dispatch_queue_create("oneQueue", DISPATCH_QUEUE_SERIAL), ^
{
[self syncAction];
});
// CFRunLoopRun(); // 1
NSLog(@"mainQueue execut 1");
}
- (void)syncAction
{
dispatch_sync(dispatch_get_main_queue(), ^
{
// CFRunLoopStop(CFRunLoopGetCurrent());
NSLog(@"mainQueue execut 2"); // 2
});
}
如果我评论了CFRunLoopRun();
和CFRunLoopStop(CFRunLoopGetCurrent());
输出:
mainQueue execut 1
mainQueue execut 2
但如果我不评论CFRunLoopRun();
和CFRunLoopStop(CFRunLoopGetCurrent());
输出:
mainQueue execut 2
mainQueue execut 1
我一直认为,如果viewDidLoad
没有执行编译,mainQueue
将不会执行
新功能块,但为什么CFRunLoopRun
可以使mainQueue
执行跳过当前功能
并执行稍后由其他asyncQueue
添加的新块。
当CFRunLoopStop(CFRunLoopGetCurren))
时,viewDidLoad
继续执行。
CFRunLoop
做了什么?