ACTUALIZACIÓN: Los instrumentos muestran goteos cuando hago esto. ¡Proceda con precaución! Estoy guardando esto aquí en caso de que realmente estoy en algo y alguien más puede encontrar la manera de superar el obstáculo de la fuga.
Aquí es una idea retorcida, que estoy volver a intentar mientras escribo esto:
Establecer la operación como el objeto para NSInvocationOperation 's initWithTarget: Selector: Objeto: método. Suponiendo que ya tiene un NSOperationQueue (lo llamaremos cola):
NSInvocationOperation *operation = [NSInvocationOperation alloc];
operation = [operation initWithTarget:self selector:@selector(myOperation:) object:operation];
[queue addOperation:operation];
[operation release];
Tenga en cuenta que tenemos que romper el alloc en su propia llamada. De lo contrario, no podemos configurar objeto en operación!
Luego, dentro de su método de operación, eche el objeto hacia atrás y espolvoree las verificaciones para se cancela según lo desee. Por ejemplo:
- (void)myOperation:(id)object {
NSInvocationOperation *operation = (NSInvocationOperation *)object;
if ([operation isCancelled]) return;
...
}
Asegúrese de que el selector termina con dos puntos de vuelta en el initWithTarget: ... llamada, ya que vas a estar pasando en un objeto ahora.
Hasta ahora, todo bien. Ahora si puedo forzar cancelAllOperations, sabré si esto realmente funciona. :)
Pero vea las otras respuestas, parece que no puede hacer esto (al menos en la forma estándar de comprobar 'isCancelled') cuando se usa' NSInvocationOperation'. – jrdioko