Objective c 如何在目标C中暂停for循环,Spritekit

Objective c 如何在目标C中暂停for循环,Spritekit,objective-c,for-loop,sprite-kit,fast-enumeration,Objective C,For Loop,Sprite Kit,Fast Enumeration,我只是想知道,是否有任何方法可以暂停for循环 比如说, for (i = 0; i<10 ; i++) { NSLog(i); //Pause should go here } for(i=0;i作为一种样式,您通常会将循环重新格式化为尾部递归。因此,不是: for(i = 0; i < 10; i++) { // ... work here ... } 它是尾部递归的,因为它的递归调用是它做的最后一件事 完成后,您可以从直接递归调用切换到延迟调用。例如,使用GCD:

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

比如说,

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

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

for(i=0;i作为一种样式,您通常会将循环重新格式化为尾部递归。因此,不是:

for(i = 0; i < 10; i++) {
    // ... work here ...
}
它是尾部递归的,因为它的递归调用是它做的最后一件事

完成后,您可以从直接递归调用切换到延迟调用。例如,使用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:][/code>或任何其他延迟调用方法


要真正做到您想要的,您可以使用C的
sleep
调用。但是该线程将在指定的秒数内阻塞。因此,除非您希望应用程序锁定,否则不要在主线程上执行该操作。

您的循环在单独的线程中吗?请注意,不建议将GCD、NSTimer、PerformSelect与Sprite工具包一起使用。I最好使用SKAction来实现这种行为,因为这是确保在应用程序暂停或进入后台时正确暂停和恢复这些任务的唯一方法。使用
SKAction
s组合是一个更好的选择。@LearnCos2D我必须承认我对
SKAction
一无所知;我已将答案标记为com社区维基-我不认为你能纠正吗?@0x141E同样的邀请会发送给你;我们只是发布了一个不幸的同步性。
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);
});