2017-03-16 1 views
0

Die Aufgabe kann abgebrochen werden, während NSOperation verwenden, während ich GCD, dann wenn ich die Aufgabe zu Warteschlange zuweisen dann können wir nicht abbrechen, daher frage ich mich, wie ich meine folgende Implementierung in konvertieren könnte GCD zu NSOperationKonvertieren GCD in 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; 
     }); 
}) 

Antwort

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

dank Inder Kumar. Ich frage mich, was ist besser in Bezug auf die Leistung? – hotspring

+1

Offensichtlich GCD ist besser in Bezug auf die Leistung, da Ihre Operationen GCD intern verwenden. Auch GCD ist Low-Level-API und NSOperation ist High-Level-API. Beides hat Vor- und Nachteile. Wie in Ihrem Problem können Sie einen GCD asynchronen Block nicht abbrechen, daher benötigen Sie Operationen. –