如何让一个方法等到另一个方法完成它在Objective C中工作?

Posted

技术标签:

【中文标题】如何让一个方法等到另一个方法完成它在Objective C中工作?【英文标题】:How to make a method to wait till another method complete it work in Objective C? 【发布时间】:2013-06-06 11:23:46 【问题描述】:

考虑这种情况。

-(void) mainMethod

   [self subMethod1];
   [self subMethod2];

我的假设:

调用mainMethod时,会先调用subMethod1,再调用subMethod2。但是,没有规则说“仅在完成subMethod1 之后,应该调用subMethod2”。如果我在subMethod1 中使用一些延迟线或一些持续时间的动画,控件将不会等待它完成。它只会开始下一个过程。因此,subMethod2 可以在 subMethod1 完成其工作之前被调用。我说的对吗?

问题:

我怎样才能让 subMethod2 等待,直到 subMethod1 完成它的工作?

注意:我不想将subMethod2 放入subMethod1

【问题讨论】:

查看块或 GCD 只是好奇,这行得通吗? [[NSOperationQueue mainQueue] performSelector:@selector(subMethod1) onThread:[NSThread mainThread] withObject:self waitUntilDone:YES]; 并在下一行正常调用subMethod2 @matsr,我认为这可能有效,但也会阻止 UI,使用完成块或 GCD 你不会阻止 UI 【参考方案1】:

您应该使用完成块(如 UIView 动画具有在动画发生后执行的块)。

如果您不熟悉块,请查看Apple's Short Practical Guide to Blocks。

【讨论】:

您的链接已损坏 ;) 最后的 index 之前的 _ 不应该在那里 ;) 这是正确的链接:developer.apple.com/library/ios/#featuredarticles/… ;)

以上是关于如何让一个方法等到另一个方法完成它在Objective C中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何让函数调用等到另一个完成

如何结合这两个功能,让一个等到它完成,然后运行另一个

如何等到方法开始和完成?

如何让 jQuery 等到 each() 中的所有 get() 请求完成

如何让一个线程停止执行另一个任务然后回来?

如何让一个方法在继续执行之前等待另一个(异步)方法完成?