Vorrei poter annullare singolarmente i selettori ritardati. Posso farlo con [NSObject cancelPreviousPerformRequestsWithTarget...]
ma ho bisogno di tutti i parametri del metodo per farlo. Nel punto in cui voglio annullare, non li ho.È possibile ottenere un elenco di selettori ritardati con performSelector: withObject: afterDelay :?
C'è un modo per ottenere l'elenco dei selettori che sono ritardati insieme ai parametri utilizzati per ritardare i selettori?
La soluzione è semplicemente tenere traccia dei parametri, ovviamente. Oppure per utilizzare GCD e fare in modo che i miei selettori (ora blocchi) controllino se devono tornare immediatamente.
Hai dimenticato di menton: il codice sta guidando parte dell'interfaccia, quindi devo tenerlo sul thread principale. Ecco perché non ho gettato NSOperation nel mix. –
hmmm ... sembra che dovrai scrivere qualcosa per realizzare questo = \ in aggiunta alle opzioni che hai menzionato nell'OP, potresti registrarti con il ciclo di esecuzione principale (potresti dover andare alle API di CF) e quindi utilizzare NSInvocations per la coda dei messaggi. in alternativa potresti essere in grado di creare un tipo di wrapper per invocazioni di gruppo, quindi utilizzare 'cancelPreviousPerformRequestsWithTarget' senza i parametri sconosciuti. infine, questi messaggi potrebbero invocare tramite un tipo personalizzato che implementa 'isEqual:'. quindi è possibile utilizzare un'implementazione personalizzata di isEqual per identificare quali messaggi annullare. – justin