如何编写两种方法完成后执行的方法(ios)

我有2个方法要执行的button单击事件说方法1 method1:和方法2:。都有networking调用,所以不能确定哪一个将首先完成。

我必须执行另一个方法methodFinish完成后method1:和method2:

 -(void)doSomething { [method1:a]; [method2:b]; //after both finish have to execute [methodFinish] } 

我怎样才能做到这一点比典型的start method1:-> completed -> start method2: ->completed-> start methodFinish

阅读关于块..我是块很新的。有人可以帮我写一个这个?任何解释将是非常有益的。谢谢

这是派遣组的目的。

 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 group dispatch_group_async(group, queue, ^{ [self method1:a]; }); // Add another task to the group dispatch_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 finished dispatch_group_notify(group, queue, ^{ [methodFinish] }); 

调度组由ARCpipe理。 它们被系统保留,直到所有的块都运行,所以在ARC下它们的内存pipe理是容易的。

如果要阻止执行直到组完成,请参阅dispatch_group_wait()

整洁的小方法,我从谷歌的iOS框架,他们非常依赖:

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

你可以使用一个标志(又名一个BOOLvariables),让你知道在任何方法(A或B),如果另一个已经完成。 有些事情是这样的:

 - (void) methodA { // implementation if (self.didFinishFirstMethod) { [self finalMethod]; } else { self.didFinishFirstMethod = YES; } } - (void) methodB { // implementation if (self.didFinishFirstMethod) { [self finalMethod]; } else { self.didFinishFirstMethod = YES; } } - (void) finalMethod { // implementation } 

干杯!