簡體   English   中英

如何通過for循環和內部的dispatch_after取消操作隊列,並增加延遲

[英]How to cancel Operation Queue with a for loop and dispatch_after inside with a growing delay

我在里面有一個OperationQ和for循環。 在此for循環內,每次for循環迭代發生時,延遲增加后,我將調用dispatch_。 這是為了確保在for循環內發生的事情會延遲並順序發生。

現在,當我想用​​新數據重置此OperationQ時。 我取消了operationQ的所有操作。 這會取消操作,但在拋出帶有調度計時器的調度后,調度仍在運行。 我可以在operationQ內取消dispatch_after嗎?

 OperationQ addoperationWithBlock({
  mainQ addOperationwithBlock({
   // Do some UI work
  delayCOnstant
  for (iteration)
  {
   delay += delayCOnstant
   dipathTime = dispatch_timeNow + delay
   dispatch_after(time, mainQ, 
   {
      // UI Drawing, dispatch after will draw smoothly and sequence
   })
  } 
  })
})

當我取消OperationQ時,該操作停止,但dispatch_after仍在使用我們給出的dispatch_time運行。 任何想法或建議

dispatch_after沒有取消機制。 能夠取消是NSOperationQueue的優點之一。 因此, NSOperation直接在您的dispatch_after塊中進行工作, NSOperation使用該塊來調度NSOperation ,然后也可以取消該操作。

正如Curmudgeonly提到的那樣,我使用了NSOperation。 但是我錯過的是一旦操作開始取消就什么也沒做。 我在操作中有一個迭代。 所以我檢查了self.cancelled然后返回。 起作用了。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM