繁体   English   中英

从NSOperationQueue取消NSOperation

[英]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类参考

要停止下载请求操作,您需要终止/停止该请求的运行循环。

为了找到操作队列中的特定操作符,我认为上述操作是允许的简单操作。

如果您需要更多控制权,

创建nsoperation的子类,并为每个操作使用标签,以便通过检查唯一标签来快速找到特定的操作。

并将自定义KVO放在操作的子类中,以在需要时立即使操作安静。 我的意思是重写该线程的启动方法。

谢谢,

纳文山

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM