AGGIORNAMENTO: Gli strumenti dimostrano perdite abbondanti quando lo faccio. Procedere con attenzione! Sto mantenendo questo qui nel caso in cui io sia in realtà su qualcosa e qualcun altro può capire come superare l'ostacolo di perdita.
Ecco un'idea contorta, che sto cercando di ri-mentre scrivo questo:
impostare il funzionamento come il oggetto per NSInvocationOperation s' initWithTarget: selettore: oggetto: metodo. si dispone già di un Presumendo NSOperationQueue (che chiameremo coda):
NSInvocationOperation *operation = [NSInvocationOperation alloc];
operation = [operation initWithTarget:self selector:@selector(myOperation:) object:operation];
[queue addOperation:operation];
[operation release];
Nota che dobbiamo spezzare l'alloc nella propria chiamata. Altrimenti non possiamo impostare oggetto a operazione!
Quindi, all'interno del metodo di operazione, eseguire il cast dell'oggetto e spruzzare i controlli per isCancelled come desiderato. Per esempio:
- (void)myOperation:(id)object {
NSInvocationOperation *operation = (NSInvocationOperation *)object;
if ([operation isCancelled]) return;
...
}
Assicurarsi che il selettore si conclude con i due punti indietro nella initWithTarget: ... chiamata, in quanto sarete di passaggio in un oggetto ora.
Finora, tutto bene. Ora se riesco a forzare cancelAllOperations, saprò se funziona davvero. :)
fonte
2009-08-11 21:03:42
Ma vedere le altre risposte, sembra che non sia possibile farlo (almeno nel modo standard di controllare 'isCancelled') quando si utilizza' NSInvocationOperation'. – jrdioko