2012-07-10 46 views
0

我使用AFNetworkingAFHTTPClient只是爲了舉例,但這個問題一般是關於NSOperationQueue客觀c - 在NSOperationQueue取消操作

AFHTTPClient管理客戶發出的請求NSOperationQueue

它也有一個cancelAllOperations方法遍歷self.operationQueue.operations和每個調用[operation cancel]

如果我理解這個權限,它將取消隊列中等待的所有操作 - 意味着尚未開始的操作,但是當前正在運行的操作是什麼?他們不會被取消??

回答

2

從Apple的文檔

當前正在執行的操作,取消意味着操作 對象的工作代碼必須檢查取消狀態,停止它是什麼 做,並標記本身完成。對於排隊但 尚未執行的操作,隊列仍必須調用操作對象的 啓動方法,以便它可以處理取消事件並將 本身標記爲完成。

操作保持在隊列中,直到它報告完成其任務 。完成其任務並不一定意味着操作完成該任務。操作也可以取消 。取消操作對象會將隊列中的對象留在隊列 中,但會通知對象應儘快終止其任務,儘可能使用 。對於當前正在執行的操作,這意味着操作對象的工作代碼必須檢查取消狀態,停止 正在執行的操作,並將自己標記爲已完成。對於 排隊但尚未執行的操作,隊列仍必須調用操作 對象的啓動方法,以便它可以處理取消事件 並將其自身標記爲已完成。

+0

是的,但問題是如果我迭代操作Queue.operations將包括「當前正在執行的操作」?我想,當一個操作開始時,它會出隊,不是嗎?所以這意味着它不會在我操作取消時操作Queue.operations,它不會被取消否? – Eyal 2012-07-10 10:08:06

+0

操作保持在隊列中,直到它報告完成其任務 。 – msk 2012-07-10 10:10:36