CFRunLoop如何更改执行顺序

时间:2015-02-11 03:58:39

标签: ios objective-c runloop

- (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 个答案:

没有答案