我只是想知道,如果有任何方式暂停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
有没有什么方法可以暂停循环一段时间,然后让它恢复枚举?
答案 0 :(得分:2)
作为一种风格问题,您通常会将循环重新格式化为尾递归。所以,而不是:
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);
它是recurses因为它自称。它是尾递归的,因为它的递归调用是它最后的事情。
完成后,您可以从直接递归调用切换到延迟调用。例如。与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&#39 {s} sleep
来电。但该线程将阻止指定的秒数。因此,除非您希望应用程序锁定,否则不要在主线程上执行此操作。