假设我有一个刚刚完成的后台队列,最后它会在主线程上做一些事情:
-(void) backgroundThreadFunction {
//Some stuff on background thread.
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomeNetworkStuff];
});
}
让我们在主线程中说,目前已有一种方法正在运行:
-(void)myMainMethod{
//Running some tasks.
}
在允许doSomeNetworkStuff()运行之前,iOS是否等待myMainMethod完成?还是允许它中断?
答案 0 :(得分:3)
不,它不能中断。行dispatch_async(dispatch_get_main_queue(), ^{
将块添加到主队列。当前方法已在主队列上运行。
就像在一个出纳员站在银行排队一样。人们排队等待轮到他们。当前客户不会被下一个在线的人打断(让我们假设这是一个礼貌的行)。
一旦myMainMethod
(当前客户)完成(以及调用它的方法完成等),就会处理队列中的下一个块(下一个客户)。