如何在 objective C 中暂停 for 循环,Spritekit

How to pause a for loop in objective C, Spritekit

我只是想知道,是否有任何方法可以暂停 for 循环。

例如,

for (i = 0; i<10 ; i++) {

NSLog(i);
//Pause should go here
}

结果应该是: 1个 (等待 1 秒) 2个 (等待 1 秒) 等等

首先,我认为您可以添加 SKAction *wait = [SKAction waitForDuration:1 completion:^{ , 但后来我不确定你是否可以从完成括号内恢复循环。

我环顾四周,发现 NSTimer,但我不确定你如何实现它,因为我必须在每个间隔后调用循环,而且它 i 永远不会更多比 0.

有什么方法可以暂停循环一段时间,然后让它恢复枚举?

作为一种风格问题,您通常会将循环重新格式化为尾递归。所以,而不是:

for(i = 0; i < 10; i++) {
    // ... work here ...
}

您将重新表述为:

void doWorkForIteration(int i, int limit) {
    if(i == limit) return;

    // ... work here ...

    doWorkForIteration(i+1, limit);
}

... 
doWorkForIteration(0, 10);

它递归是因为它调用了自己。它是尾递归的,因为它的递归调用是它做的最后一件事。

完成后,您可以从直接递归调用切换到延迟调用。例如。与 GCD:

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^{
    doWorkForIteration(i+1, limit);
});

... 或使用 [self performSelector: withObject: afterDelay:] 或任何其他延迟调用方法。

要按字面意思执行您想要的操作,您可以使用 C 的 sleep 调用。但是该线程将阻塞指定的秒数。所以不要在主线程上这样做,除非你想让你的应用程序锁定。