Как 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 сделанный?

0 ответов

Другие вопросы по тегам