假设我在主线程上调用下面的方法。如果在调用该方法时其他线程正在对该数组执行写操作,则dispatch_sync将阻塞。但是它阻塞在另一个队列(不是主队列)上。当此状态被阻止时,主队列上的状态是什么(方法不能向前移动,直到disaptch_sync返回,但是将其视为对主队列的异步调用)。例如:主队列会响应UI事件吗?如果是,当对用户事件的反应发生时,dispatch_sync返回时,方法调用的状态将如何处理?
-(id) objectAtIndex:(NSUInteger)index
{
__block id obj;
dispatch_sync(self.dataAccessQ, ^{
obj = self.embeddedArray[index];
});
return obj;
}
不管是不是主队列。无论用于呼叫的队列是什么,objectAtIndex:
都会阻塞该dispatch_sync
呼叫,直到完成。
如果在主队列上调用此代码,则它将像其他队列一样阻塞。在此期间,不会处理任何用户事件。在此期间,用户界面将显示为已锁定。完成后,UI将再次正常运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句