如何取消NSOperationQueue(How to cancel NSOperationQueu

2019-08-07 14:57发布

想知道如果我正确地实现以下方法,因为isCancelled没有取消线程。 我有我缩放图像,并且当它完成缩放,这种方法被调用来更新图像。 因此,当用户提起他们的手指离开按钮,这就是所谓的。 如果他们试图再次按下该按钮在此之前完成,我叫cancelAllOperations在队列中,但它不工作。 甚至不知道如果cancelAllOperations触发标志,或者如果我需要保持调用它得到的结果。 任何人有这个任何见解?

- (void) refreshImage
{
    NSBlockOperation *operation = [[NSBlockOperation alloc] init];
    __unsafe_unretained NSBlockOperation *weakOperation = operation;

    [operation addExecutionBlock:
     ^{
         UIImage *image = [[self.graphicLayer imageForSize:self.size] retain];
         if (![weakOperation isCancelled])
         {
             [[NSOperationQueue mainQueue] addOperationWithBlock:
              ^{
                  self.image = image;
                  [image release];
              }];
         }
         else
         {
             [image release];
             return;
         }
     }];

    [self.queue addOperation: operation];
    [operation release];
}

Answer 1:

发现问题,必须更换:

__unsafe_unretained NSBlockOperation *weakOperation = operation;

有:

__block NSBlockOperation *weakOperation = operation;

BTW,有兴趣的人士有上并发好的视频,在一个单独的线程特定的图形中,并使用NSOperationQueue的在WWDC2012呼吁IOS构建并发用户界面。



文章来源: How to cancel NSOperationQueue