2012-07-10 75 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