Вы можете попробовать это всегда сначала вызывать block1, а затем после вызова block2.
Работает нормально на Xcode 11, iOS13
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
// block1
NSLog(@"Block1");
});
[NSThread sleepForTimeInterval:1.0];
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {
// block2
NSLog(@"Block2");
});
или
dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
// Task is completed, so signal that it has finished
NSLog(@"Block1");
dispatch_group_leave(group);
// Make the second task wait until group1 has completed before running
dispatch_group_enter(group);
// Task is completed, so signal that it has finished
NSLog(@"Block2");
dispatch_group_leave(group);