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]; }}