2011-02-15 11 views
6

Me gustaría poder cancelar los selectores diferidos individualmente. Puedo hacer esto con [NSObject cancelPreviousPerformRequestsWithTarget...] pero necesito todos los parámetros del método para hacer esto. En el punto donde quiero cancelar, no los tengo.¿Puedo obtener una lista de selectores demorados con performSelector: withObject: afterDelay :?

¿Hay alguna manera de obtener la lista de selectores que se retrasan junto con los parámetros utilizados para retrasar los selectores?

La solución es simplemente hacer un seguimiento de los parámetros, por supuesto. O para usar GCD y hacer que mis selectores (ahora bloques) comprueben si deberían regresar inmediatamente.

Respuesta

0

no directamente. una forma fácil de lograr esto sería usar NSOperation; luego solo mantenga referencias a las operaciones que posiblemente necesite cancelar en el futuro.

+0

He olvidado a menton: el código está manejando parte de la interfaz, así que tengo que mantenerlo en el hilo principal. Es por eso que no lancé NSOperation a la mezcla. –

+0

hmmm ... parece que tendrá que escribir algo para lograr esto = \ Además de las opciones que ha mencionado en el OP, puede registrarse con el ciclo de ejecución principal (puede que tenga que ir a las API de CF)) y luego use NSInvocations para la cola de mensajes. alternativamente, usted puede crear un tipo de envoltura para agrupar invocaciones, luego use 'cancelPreviousPerformRequestsWithTarget' sin los parámetros desconocidos. finalmente, estos mensajes podrían invocarse a través de un tipo personalizado que implemente 'isEqual:'. luego puede usar una implementación personalizada de isEqual para identificar qué mensajes cancelar. – justin

Cuestiones relacionadas