Как CFRunLoop изменить порядок исполнения
- (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
сделанный?