objective-c xcode iphone-sdk-3.0 nstimer invalidate

objective c - ¿Cómo encontrar si NSTimer está activo o no?



objective-c xcode (4)

Tengo algo como esto:

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats:YES];

Estoy actualizando el texto de una etiqueta usando este temporizador. No en una condición determinada, quiero comprobar si el temporizador está activo y luego invalidar el temporizador. Mi pregunta es ¿cómo encuentro que el temporizador está activo o no?


Cuando se dispara un temporizador que no se repite, se marca como inválido, por lo que puede verificar si aún es válido antes de cancelarlo (y, por supuesto, deshacerse de él).

if ( [timer isValid] && yourOtherCondition){ [timer invalidate], timer=nil; }

En su caso, tiene un temporizador de repetición, por lo que siempre será válido hasta que realice alguna acción para invalidarla. Parece que, en este caso, está ejecutando una cuenta regresiva, por lo que será su responsabilidad asegurarse de invalidarla y deshacerse de ella cuando la cuenta regresiva alcance el valor deseado (en su método updateCountdown)


En Swift, puedes usar el booleano isValid para ver si el temporizador se está ejecutando:

if timer.isValid { // Do stuff }

De los documentos de Apple :

Un valor booleano que indica si el receptor es actualmente válido. (solo lectura)

verdadero si el receptor todavía es capaz de disparar o falso si el temporizador ha sido invalidado y ya no es capaz de disparar.


Mantenga el temporizador en una variable de instancia y establezca timer = nil cuando no haya ningún temporizador en ejecución (es decir, después de llamar [timer invalidate] ). Luego, para verificar si el temporizador está activo, puede verificar si el timer == nil .


NSTimer tiene un método -isValid .