objective-c - Objective C for 循环延迟

标签 objective-c for-loop cocos2d-iphone delay grand-central-dispatch

我有一个 for 循环,我想在迭代之间添加延迟。我已将 waitUntilDone 更改为 YES 并获得相同的结果。我的数组中只有两个数字,并且都在五秒后被调用,而不是:

0s - 没有 5s - block 叫 10s- block 调用

for(NSNumber* transaction in gainsArray) {

    double delayInSeconds = 5.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {

        NSLog(@"Block");

        [self performSelectorOnMainThread:@selector(private_addTransactionToBankroll:)
        withObject:transaction waitUntilDone:NO];

    });
}

2015-06-16 20:11:06.485 TestApp[97027:6251126] Block
2015-06-16 20:11:06.485 TestApp[97027:6251127] Block

如果重要的话,我正在使用 Cocos2d

最佳答案

for 循环将一个接一个地调度,因此它们基本上会延迟相同的时间。
而是为每个设置不同的递增延迟:

double delayInSeconds = 0.0;
for(NSNumber* transaction in gainsArray)
{
    delayInSeconds += 5.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
                   {
                       NSLog(@"Block");
                       [self performSelectorOnMainThread:@selector(private_addTransactionToBankroll:)
                                              withObject:transaction
                                           waitUntilDone:NO];

                });
}

关于objective-c - Objective C for 循环延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880354/

相关文章:

objective-c - 定义缓存变量时在objective-c中使用static关键字

iphone - 优化圆角性能

javascript - 如何在 $(document).ready(function(){}) 中使用 for 循环?

ios - 在 Cocos3d 中播放音频文件

iphone - NSDateFormatter IOS 错误

objective-c - @optional 协议(protocol)方法的真实世界示例

javascript - for循环,保持变量

c - 为什么这些排序标准之一起作用,而另一个不起作用?

ios - 我的 Cocos2D-iPhone 游戏可以支持 VoiceOver 吗?

cocos2d-iphone - 在Cocos2d中刷卡