如何从NSOperationQueue中删除/取消NSInvocationOperation?

时间:2011-07-26 08:23:59

标签: iphone multithreading nsoperationqueue nsinvocation

在上下文中要求提出以下两个问题以维护NSOperationQueue和NSInvocationOperation。

由于我使用此概念下载多个视频,如何在完成下载视频后从NSOperationQueue中删除/释放添加的NSInvocationOperation?

另外,如果我想在正在下载的过程中停止下载特定视频,我该怎么办?

2 个答案:

答案 0 :(得分:5)

  

如何在完成下载视频后从NSOperationQueue中删除/释放添加的NSInvocationOperation?

操作在完成后自动从队列中删除,即 - isFinished返回true时。

  

另外,如果我想在正在下载的过程中停止下载特定视频,我该怎么办?

如果要在中途停止操作,则必须向其发送-cancel消息。 然而这不会神奇地停止运行。您的任务需要定期检查是否已取消,如果事实证明已经完成,则需要自行完成。因此,您需要以块的形式下载视频,并在每个块后检查操作的取消状态。以下伪代码可能有所帮助:

 while (![myOperation isCancelled] && thereIsMoreData)
 {
     download a chunk of data and save it
 }

这意味着,例如,您无法使用NSURLConnection的{​​{1}}来获取数据,因为在所有数据之后它将无法检查操作的取消状态已下载。

答案 1 :(得分:1)

在NSOperation执行完该任务后,它将自动从队列中删除。参考link

制作NSOperation的子类。为每个操作保留一个标识符。将所有操作存储在数组中。当你不想继续操作时,只需给操作取消消息,即[_operation cancel];