3

在上下文中询问以下两个问题以维护 NSOperationQueue 和 NSInvocationOperation。

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

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

4

2 回答 2

5

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

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

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

当您想在中途停止操作时,您必须向它发送-cancel消息。但是,这不会神奇地阻止操作运行。你的任务需要定期检查它是否被取消,如果它已经被取消,它会自行完成。因此,您需要分块下载视频,并在每个块之后检查操作的取消状态。以下伪代码可能会有所帮助:

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

这意味着,例如,您不能使用NSURLConnection's-sendSynchronousRequest:returningResponse:error:来获取数据,因为在所有数据都已下载之前,它无法检查操作的取消状态。

于 2011-07-26T09:16:19.443 回答
1

在 NSOperation 完成该任务后,它将自动从队列中删除。参考链接

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

于 2011-07-26T08:33:43.307 回答