[英]Cancel NSOperation From NSOperationQueue
我已经从URL下载了信息,并且我想在NSOperationQueue中以NSOperation的形式发送此URL,我想知道如何删除特定的NSOperation来下载特定URL的数据,现在我是这样进行的:
AppDelegate *appController = (AppDelegate *) [[UIApplication sharedApplication] delegate];
for (NSOperation *op in appController.seriesQueue.operations) {
if ([op isKindOfClass:[MyDowndload class]]) {
MyDownload *urlInDownload = (MyDowndload *)op;
if ([urlInDownload.myNew.urlName isEqualToString:[managedObject valueForKey:@"urlName"]] && [urlInDownload.myNew.language isEqualToString:[managedObject valueForKey:@"language"]]) {
[op cancel];
}
}
}
我在表视图中有此信息,因此,当我删除该索引路径的行时,请在此检查中输入,然后在[op cancel]行中也输入,但是我可以在控制台日志中看到该线程仍在下载中,我可以停止并删除它吗?
根据苹果的指导方针,取消操作不会立即强制其停止正在执行的操作。 尽管尊重所有操作均应遵循isCancelled返回的值,但是您的代码必须显式检查此方法返回的值并根据需要中止。
贾斯汀建议的示例...。这是根据需要中止执行方法的方法。
- (void)main
{ \\ ...do work...
if (self.isCancelled)
{ \\ ...get out... }
}
要停止下载请求操作,您需要终止/停止该请求的运行循环。
为了找到操作队列中的特定操作符,我认为上述操作是允许的简单操作。
如果您需要更多控制权,
创建nsoperation的子类,并为每个操作使用标签,以便通过检查唯一标签来快速找到特定的操作。
并将自定义KVO放在操作的子类中,以在需要时立即使操作安静。 我的意思是重写该线程的启动方法。
谢谢,
纳文山
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.