Ios 之后的多次调度无法正常工作

Ios 之后的多次调度无法正常工作,ios,objective-c-blocks,grand-central-dispatch,Ios,Objective C Blocks,Grand Central Dispatch,很容易延迟执行这样的操作 double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ <#code to be executed on the main queue after dela

很容易延迟执行这样的操作

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    <#code to be executed on the main queue after delay#>
});
但如果再加上一个较长的延迟,则会使上述代码无法执行

double delayInSeconds2 = 3.0;
dispatch_time_t popTime2 = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds2 * NSEC_PER_SEC);
dispatch_after(popTime2, dispatch_get_main_queue(), ^(void){
    <#code to be executed on the main queue after delay#>
});

为什么只执行较长的一个而不是两个?还是我完全错了

这是一个队列,但位置取决于未来的开火时间,而不是排队时间

如果第二个是1秒,它将在第一个之前插入


如果您希望它们在单核cpu的时间片上并发执行,或者在多核cpu的实时并发执行,请将它们放在不同的队列上。

我测试时是这样的:2秒后,执行最上面的一个。再过1,3-2秒,执行底部代码。但是,如果顶级代码在开始前需要超过1秒的时间才能完成,则底层代码会等待顶级代码完成。我可以理解它也不能像您预期的那样工作吗?最初我认为它是一个串行队列。但是我做了另一个测试,设置delayInsectionDS2=1.0,第二个代码首先执行。所以这些是独立的。我的解释是,它允许您在之后安排多个调度,但这些队列本质上是同步的。