如何编写两种方法完成后执行的方法(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 }
干杯!