在上下文中要求提出以下两个问题以维护NSOperationQueue和NSInvocationOperation。
由于我使用此概念下载多个视频,如何在完成下载视频后从NSOperationQueue中删除/释放添加的NSInvocationOperation?
另外,如果我想在正在下载的过程中停止下载特定视频,我该怎么办?
答案 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];