【问题标题】:Wondering how to make a block of code wait for something else to complete想知道如何让一段代码等待其他事情完成
【发布时间】:2013-01-18 16:43:04
【问题描述】:

另一个快速的:

如果我执行这样的操作:

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:]

完成? 抱歉,这似乎是一个业余问题。 我是业余爱好者。

【问题讨论】:

    标签: loops wait execution performselector


    【解决方案1】:

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

    如果您在“while”循环中添加类似“NSLog( @"in main function");”的行,则当您的 performSelector 启动时,它应该停止。

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

    【讨论】:

    • 那么,当我调用 performSelector:withObject:afterDelay: 时会发生什么-EXACTLY- 预先存在的条件是调用的 performSelector: 方法和调用 performSelector: 的方法都在同一个主线程中。程序执行是否到达 performSelector:afterDelay: 命令然后继续执行代码?还是在 afterDelay: 时间段过去之前停止?我觉得如果我理解 - 准确 - 在非常“接近金属”的水平上发生了什么,我将能够更好地使用该命令......
    【解决方案2】:
    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
    }
    }
    

    【讨论】:

    • 因此,如果我从 -inside- 一个 while 循环调用 performSelector,然后调用一个使 while 循环条件停止执行的方法,那会起作用吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 2020-04-28
    • 2021-07-15
    • 2021-12-23
    • 2021-01-06
    • 2020-09-21
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多