How to write the method to execute after completion of two methods (ios) How to write the method to execute after completion of two methods (ios) objective-c objective-c

How to write the method to execute after completion of two methods (ios)


This is what dispatch groups are for.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_group_t group = dispatch_group_create();// Add a task to the groupdispatch_group_async(group, queue, ^{  [self method1:a];});// Add another task to the groupdispatch_group_async(group, queue, ^{  [self method2:a];});// Add a handler function for when the entire group completes// It's possible that this will happen immediately if the other methods have already finisheddispatch_group_notify(group, queue, ^{   [methodFinish]});

Dispatch groups are ARC managed. They are retained by the system until all of their blocks run, so their memory management is easy under ARC.

See also dispatch_group_wait() if you want to block execution until the group finishes.


Neat little method I got from Googles iOS Framework they rely on pretty heavily:

- (void)runSigninThenInvokeSelector:(SEL)signInDoneSel {    if (signInDoneSel) {        [self performSelector:signInDoneSel];    }}