我怎么称呼不当dispatch_async
电话里面dispatch_async
嵌套dispatch_async(另一dispatch_async内dispatch_async)
dispatch_group_t downloadQueue = dispatch_group_create();
dispatch_group_async(downloadQueue,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
NSLog(@"Main");
[NSThread sleepForTimeInterval:5.0];
NSLog(@"End");
[self myMethod];
});
dispatch_group_notify(downloadQueue,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{
NSLog(@"FINAL");
});
这里是myMethod的:
-(void)myMethod
{
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
// block1
NSLog(@"Block1");
[NSThread sleepForTimeInterval:5.0];
NSLog(@"Block1 End");
});
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
// block2
NSLog(@"Block2");
[NSThread sleepForTimeInterval:8.0];
NSLog(@"Block2 End");
});
dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),^{
// block3
NSLog(@"Block3");
});
}
和我的输出是:
主要
结束
Block1
块2
FINAL
块1结束
块2结束
块3
,但我需要
主要
末
块1
块2
块1结束
块2结束
块3
FINAL
你的问题是'myMethod'是异步的,所以它会派遣它的块,然后返回,退出外部调度组。使用dispatch_group_enter和dispatch_group_leave,而不是dispatch_group_async – Paulw11