我正在使用AFNetworking
AFHTTPClient
作为示例,但这个问题一般是NSOperationQueue
。
AFHTTPClient
为客户提出的请求管理NSOperationQueue
。
它还有cancelAllOperations
方法迭代self.operationQueue.operations
并为每个方法调用[operation cancel]
。
如果我理解这一点,它将取消队列中等待的所有操作 - 这意味着尚未启动的操作,但是当前正在运行的操作是什么?他们不会被取消?
答案 0 :(得分:2)
来自Apple的文档
对于当前正在执行的操作,取消表示该操作 对象的工作代码必须检查取消状态,停止它是什么 做,并标记自己完成。对于排队的操作但是 尚未执行,队列仍然必须调用操作对象 启动方法,以便它可以处理取消事件和标记 本身就完了。
操作将保留在队列中,直到报告完成为止 有它的任务。完成任务并不一定意味着 操作执行该任务完成。操作也可以 取消。取消操作对象会将对象留在队列中 但通知对象它应该尽快中止其任务 可能。对于当前正在执行的操作,这意味着 操作对象的工作代码必须检查取消状态,停止 它正在做什么,并将自己标记为已完成。对于那些操作 排队但尚未执行,队列仍然必须调用该操作 object的start方法,以便它可以处理取消事件 并标记为已完成。