1
它很容易耽誤執行這樣的事情多dispatch_after不能很好地工作
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#>
});
爲什麼只執行更長的一個,而不是兩個?還是我完全錯了?
當我測試時,它的工作原理如下:2秒後,頂部一個被執行。接下來的1,(3-2),第二,底部代碼得到執行。然而,底層代碼在開始之前確實需要等待頂層代碼完成(如果頂層代碼需要超過1秒才能完成)。 – user523234
我可以理解它不符合您的預期嗎? – Forrest
最初我以爲這是一個串行隊列。但是我通過設置delayInSeconds2 = 1.0和第二個代碼首先執行了另一個測試。所以這些是獨立的。我的解釋是,它允許您安排多個dispatch_after,但這些隊列本質上是同步的。 – user523234