正確方法我用UIViewController
DispatchQueue.main.async
,我需要取消異步任務時解僱UIViewController
到取消的AsyncTask在迅速
0
A
回答
2
大中央調度不允許任務,從外部已經在運行時被取消。
如果您的視圖控制器仍然存在,您基本上必須檢查異步運行的任務。
假設你到GCD電話直接在UIViewController,所以自我是指視圖控制器:
DispatchQueue.global().async { [weak self] in
// Do work
// Check if self still exists:
guard let _ = self else {
return // cancels the task
}
// Continue working
}
由於自身只是一個弱引用您的視圖控制器它不會得到制止視圖控制器被解僱時釋放。當它被釋放時,你的GCD塊內的自己變成零,並且你知道你可以停止你的任務。
所以你只需要在異步塊中檢查self是否每隔一段時間都是零。
注意:不要在主隊列上執行長時間運行的任務,而是在全局隊列或私有隊列中執行長時間運行的任務。使用主隊列阻止主線程執行其他工作,如UI更新,以便您的應用程序凍結。
+0
感謝您的幫助 –
相關問題
- 1. 無法取消在OperationQueue迅速
- 2. 取消NSOperationQueue不能在迅速工作
- 3. 迅速,alamofire取消先前請求
- 4. 得到迅速
- 5. 如何獲取在迅速
- 6. 讀取宏迅速
- 7. 取消的AsyncTask
- 8. 的AsyncTask不取消取消
- 9. Coreplot在迅速:軸到1
- 10. 得到錯誤在迅速
- 11. 錯誤使用消耗迅速在iOS
- 12. 取消的AsyncTask在Android的
- 13. AsyncTask不會收到取消
- 14. 取消AsyncTask遇到Thread.sleep
- 15. 在迅速
- 16. 在迅速
- 17. 在迅速
- 18. 在迅速
- 19. mutableCopy在迅速
- 20. NSRegularExpressions在迅速
- 21. 在迅速
- 22. 在迅速
- 23. 在迅速
- 24. NSPredicate在迅速
- 25. 在迅速
- 26. 在迅速
- 27. 在迅速
- 28. 在迅速
- 29. 在迅速
- 30. 在迅速
[編輯]你的問題與一些相關的代碼,顯示你在'async'塊中實際做了什麼。 – rmaddy