【问题标题】:NSOperationQueue cancelAllOperations not work when viewWillDisappearviewWillDisappear 时 NSOperationQueue cancelAllOperations 不起作用
【发布时间】:2023-03-06 03:50:01
【问题描述】:

我的代码:

NSOperationQueue *queue;

-(void)viewDidLoad
{
    queue = [NSOperationQueue new];
    NSOperation* loadImgOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(refresh) object:nil];
    [queue addOperation:loadImgOp];

}

-(void)refresh
{
   [self operationFirst];         
   [self operationSecond];
   ... 
   [self operationFive];
   dispatch_async(dispatch_get_main_queue(), ^{
      [self.tableView reloadData];
   });

}

- (void)viewWillDisappear:(BOOL)animated {
   [super viewWillDisappear:animated];
   [queue cancelAllOperations];     
}

当我调用 new ViewController 时,-(void)refresh 会继续工作。 cancelAllOperations 不起作用。

【问题讨论】:

  • "cancelAllOperations not working" 你到底看到了什么?
  • 当我退出这个 ViewController(调用新的 ViewController)时,我想终止这个方法 -(void) refresh。

标签: ios objective-c nsoperation nsoperationqueue


【解决方案1】:

您不能在当前配置中。您应该添加一个cancelled 属性并在整个方法中检查它。

在队列上调用取消将操作标记为已取消并阻止新操作运行,但它不会终止正在运行的操作。由每个操作来管理其取消。在 then are 的调用中它不能做任何事情,因为它已经调用了目标方法。

【讨论】:

  • 添加属性很简单。使它成为一个布尔值。将其设置为YES 中将消失。检查它并在它调用的每个方法之间从刷新返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多