想知道如何使代码块等待其他东西完成

时间:2013-02-04 00:34:48

标签: loops wait execution performselector

另一个快速的:

如果我执行这样的事情:

runningAnimation = YES;
[self performSelector:@selector(animationsComplete) withObject:nil afterDelay:0.1[;

// Return to main function
-(void) mainFunction
{
while (runningAnimation)
{
continue;
}
}

// And, animationsComplete looks like this:
-(void) animationsComplete
{
runningAnimation = NO;
}

该程序似乎永远不会退出while循环。 谁能告诉我为什么会这样?

另一方面,如果这种类型的“在我的代码中等待完成执行的事情”在我试图做的事情上真的不能正常工作,还有另一种方法可以做同样的事情吗? 在等待

的呼叫时暂停一个功能
[self performSelector:withObject:afterDelay:]

完成? 对不起,如果这看起来像一个业余问题。 我是个业余爱好者。

2 个答案:

答案 0 :(得分:0)

那是因为你的" performSelector:"发生在你当前的(主)线程上。

如果您添加类似" NSLog( @"in main function");"在那里" while"循环,只要你的performSelector启动,就应该停止。

您需要在另一个(分离的)线程上执行performSelector,或使用块。 Some blocks can use "stop" Booleans在他们的论点中。

答案 1 :(得分:0)

WHILE (ANIMATIONCOMPLETE != 1) {
... Do work ...
... When work is done, like using if code... ...
IF (SomeBoolean // That means work done == (0 for false, continue, 1 for true, break)) {
BREAK;
}
ELSE {
CONTINUE
}
}