取消的NSOperation从NSOperationQueue(Cancel NSOperation

2019-10-16 15:31发布

我从一个URL下载的信息,而我在NSOperationQueue发送此网址的NSOperation,我想知道,我怎么能删除特定的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];
            }
        }
    }

我有一个tableview中的信息,所以当我删除索引路径的行我在单向进入,并在同时进入[OP取消]行,但我可以在控制台日志中看到线程仍在下载,怎么样我可以停止和删除呢?

Answer 1:

据苹果方针,取消操作不会立即强制停止它在做什么。 虽然尊重由isCancelled返回的值,预计所有的操作,你的代码必须明确检查此方法的返回值,并根据需要中止。

例如,作为推荐贾斯汀....根据需要这方式中止方法的执行。

- (void)main
 { \\ ...do work... 
   if (self.isCancelled)
      { \\ ...get out...  } 
 } 

的NSOperation类参考苹果



Answer 2:

要停止下载u需要杀死请求操作/停止请求的runloop。

要查找操作队列中的特定operaton我觉得上面的操作是简单的允许。

如果你需要更多的控制,

创建的NSOperation的子类,并使用标记为每个操作,这样就可以通过独特的标签检查快速查找特定的操作。

并把自定义的国际志愿者组织在运作的子类,以在需要时立即安静的操作。 我的意思是覆盖该线程的启动方法。

谢谢,

纳文珊



文章来源: Cancel NSOperation From NSOperationQueue