I have a series of dispatch_async that I am performing and I would like to only update the UI when they are all done. Problem is the method within dispatch_async calls something in a separate thread so it returns before the data is fully loaded and dispatch_group_notify is called before everything is loaded.
So I introduce a infinite loop to make it wait until a flag is set. Is this the best way? See code below.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_group_t group = dispatch_group_create();
for (...) {
  dispatch_group_async(group, queue, ^{
    __block BOOL dataLoaded = NO;
    [thirdPartyCodeCallWithCompletion:^{
       dataLoaded = YES;
    }];
    // prevent infinite loop
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), 
    queue, ^{
          dataLoaded = YES;
    });
    // infinite loop to wait until data is loaded
    while (1) {
       if (dataLoaded) break;
    }
  }
  dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    //update UI
  });
}
 
     
    