可以调用iOS主线程操作从后台队列中断一个方法调用吗?

时间:2016-01-22 04:04:52

标签: ios multithreading

假设我有一个刚刚完成的后台队列,最后它会在主线程上做一些事情:

-(void) backgroundThreadFunction {
     //Some stuff on background thread. 
     dispatch_async(dispatch_get_main_queue(), ^{
         [self doSomeNetworkStuff];
     });
}

让我们在主线程中说,目前已有一种方法正在运行:

-(void)myMainMethod{
     //Running some tasks.
}

在允许doSomeNetworkStuff()运行之前,iOS是否等待myMainMethod完成?还是允许它中断?

1 个答案:

答案 0 :(得分:3)

不,它不能中断。行dispatch_async(dispatch_get_main_queue(), ^{将块添加到主队列。当前方法已在主队列上运行。

就像在一个出纳员站在银行排队一样。人们排队等待轮到他们。当前客户不会被下一个在线的人打断(让我们假设这是一个礼貌的行)。

一旦myMainMethod(当前客户)完成(以及调用它的方法完成等),就会处理队列中的下一个块(下一个客户)。