[英]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.