如何在 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
调用。但是该线程将阻塞指定的秒数。所以不要在主线程上这样做,除非你想让你的应用程序锁定。
我只是想知道,是否有任何方法可以暂停 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
调用。但是该线程将阻塞指定的秒数。所以不要在主线程上这样做,除非你想让你的应用程序锁定。