2011-11-14 10 views
10

estoy haciendo una llamada a función con scheduledTimerWithTimeInterval. Solo estoy verificando que el análisis xml se haya completado o no para servicios web particulares y el temporizador de invalidación en el método didEndElement después de obtener una respuesta exitosa.scheduledTimerWithTimeInterval vs performselector con retraso con iOS 5.0

timerForStopWebService = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(stopWS) userInfo:nil repeats:NO]; 

ahora tengo un problema con iOS 5.0 y está funcionando bien en otras versiones de iOS. en iOS 5.0, una función stopWS llama en cualquier momento, incluso si lo estoy invalidando. avísame si tienes una solución para eso.

y ahora estoy implementando performselector con delay y establezco variables booleanas en stopWS para identificar que el análisis se ha completado o no. solo quiero saber si hay alguna diferencia importante entre esto? y esta solución funciona para mi problema?

si existe otra manera, por favor sugiérame, gracias.

+1

No entiendo lo que está buscando. ¿Desea SIEMPRE llamar al método? ¿O quieres poder invalidarlo para que no se llame? Eso no está claro. – Oliver

+0

solo quiero saber la diferencia entre scheduledTimerWithTimeInterval vs performselector con retraso en profundidad porque estoy enfrentando un problema con iOS 5.0. –

+0

¿Y cuál es este problema? Hablas de ello en tu pregunta, pero no está claro. – Oliver

Respuesta

21

Éstos son sus diferencias

performSelectorWithObjectAfterDelay

  • como su nombre indica realiza un selector después de un número especificado de segundos. UNA VEZ.

  • La atención que debe tener aquí es que debe cancelar las solicitudes de ejecución anteriores antes de que se libere el objeto en el que se está realizando el selector. Para eso use el método cancelPerformSelector.

scheduledTimerWithTimeInterval

  • este método le da la posibilidad de llamar a un selector después de una duración especificada también, pero también tiene un parámetro [repite:] que le permite llamar al mismo selector REPETIDAMENTE

  • También puede pasar invocaciones para llamar a los selectores, que son especialmente útiles cuando su selector necesita muchos argumentos.

  • Debe invalidar el temporizador cuando ya no sea necesario. Esto debería ser el truco

    [myTimer invalidate]; myTimer = nil;

También este es el hilo más definitivo en NSTimer, échele un vistazo. How do I use NSTimer?

0

Puede usar performSelectorWithObjectAfterDelay y luego cancelPerformSelector para cancelarlo si ya no es necesario. Creo que esto es más fácil que scheduledTimerWithTimeInterval ya que no necesita almacenar una referencia al temporizador. En su mayor parte, estos dos enfoques deberían comportarse igual.

+0

No necesita almacenar la referencia del temporizador. Una vez que se agrega al bucle, solo necesita la referencia si desea cancelarla ... lo mismo que cancelPerformSelector. De lo contrario, podrías hacer un temporizador con un solo disparo. – David

+0

La principal diferencia es cuando desea cancelarla, lo que el asker parece necesitar. En cancelPerformSelector solo necesita la referencia al objeto, al que generalmente tiene acceso de todos modos (probablemente sea solo uno mismo). Para cancelar un temporizador, debe haber almacenado el temporizador en alguna parte, probablemente como una variable de instancia. – zeroimpl

Cuestiones relacionadas