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

all*_*Nit 3 iphone multithreading nsoperationqueue nsinvocation

在上下文中要求以下两个问题来维护NSOperationQueue和NSInvocationOperation.

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

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

Jer*_*myP 5

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

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

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

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

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

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