2017-03-16 7 views
0

NSOperationを使用しているときにタスクをキャンセルすることができますが、GCDを使用している場合は、タスクをキューに割り当ててから取り消すことができないため、次の実装をGCDGCDをNSOperationqueueに変換する

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { 
    [self addAllImages]; 
     dispatch_sync(dispatch_get_main_queue(), ^(void) { 
      [self pageControlSetUp]; 
      self.fullScreenImageView.hidden = YES; 
     }); 
}) 

答えて

2
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ 
    [self addAllImages]; 
    dispatch_sync(dispatch_get_main_queue(), ^(void) { 
    [self pageControlSetUp]; 
    self.fullScreenImageView.hidden = YES; 
    }); 
}]; 


[queue addOperation:operation]; 


//cancel operation 
[operation cancel]; 

//or to cancell all operations 
[queue cancelAllOperations]; 
+0

NSOperationのおかげインダー・クマール。私はパフォーマンスの点でどちらが優れているのだろうか? – hotspring

+1

GCDは内部的にGCDを使用しているため、GCDはパフォーマンス面で優れています。また、GCDは低レベルのAPIであり、NSOperationは高レベルのAPIです。どちらも長所と短所があります。あなたの問題のように、GCDの非同期ブロックをキャンセルすることはできませんので、操作が必要です。 –

関連する問題