在NSoperationQueue上调用 - (void)cancelAllOperations没有设置队列中存在的NSOperation的isCancelled属性

kid*_*d49 7 multithreading objective-c nsoperation nsoperationqueue ios

我面临与NSoperationQueue相关的问题.在我的代码中:

-(void) viewDidLoad
{
    //Initialisation of queue and operation.
    //adding operation to queue
    [self.operationQueue addOperation:op];

}

 -(void) viewWillDisappear:(BOOL)animated 
{
   [super viewWillDisappear:animated];
   [self.operationQueue cancelAllOperations];
}
Run Code Online (Sandbox Code Playgroud)

所以在执行我的NSOperation主函数时,当我检查isCancelled属性时,它总是返回NO.在NSOperationQueue上调用cancellAllOperation之后的事实.例如.

-(void)main
{
   if(self.isCancelled)
   {
    // Never executing this block :-(
   }

 }
Run Code Online (Sandbox Code Playgroud)

欲了解更多详细信息,我在做我的NSOperation.And一些网络电话,当我切换到另一种观点届时cancelAllOperation的叫了起来.当网络响应回到我的NSOperation时,我正在检查是否(Self.isCancelled),现在我在另一个视图中(意味着isCancelled应该设置为YES).但这个检查总是失败.

小智 1

您的操作在加载视图后立即添加到队列中viewDidLoad,然后队列将负责启动该操作。

由于您在视图消失 ( viewWillDisappear) 时取消了操作,因此操作很可能会在此时完成。也就是说,你的操作被终止后就被取消了。您可以检查该isExecuting属性以了解该操作是否正在运行。