Search code examples
iphoneiosnsoperationnsoperationqueue

how to cancel out of operation created with addOperationWithBlock?


I'm using NSOperationQueue's addOperationWithBlock. From within the block, how do I check to see if I'm supposed to cancel the operation? Or access any NSOperation properties/methods?

[myOperationQueue addOperationWithBlock: ^{

  while ( /* long running loop */ )
  {
      // how to determine here if I need to cancel?
      // for that matter, access any NSOperation properties/methods?

  }

}];

Is the better way to do this to use a NSBlockOperation?


Solution

  • A better solution might be to use NSBlockOperation and add that to the queue instead of a raw block. You could do something like:

    __block NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
      while(![operation isCancelled]){
        //Some long operation
      }
    }];
    
    [[self queue] addOperation:operation];
    

    This lets you use blocks while giving you a little more control over the operation... and a few more NSOperation niceties as well (like the ability to add completion blocks, for example).