2011-11-14 9 views
10

Sto effettuando una chiamata di funzione con scheduleTimerWithTimeInterval. Sto solo controllando che l'analisi xml sia completata o meno per determinati servizi web e invalida il timer nel metodo didEndElement dopo aver ottenuto una risposta positiva.scheduledTimerWithTimeInterval vs performselector con ritardo con iOS 5.0

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

ora sto affrontando problema con iOS 5.0 e il suo funzionamento benissimo in altre versioni di iOS. in iOS 5.0, una funzione stopWS chiama in qualsiasi momento anche se la sto invalidando. fammi sapere se hai una soluzione per questo.

e ora sto implementando performselector con ritardo e imposta variabili booleane in stopWS per identificare che l'analisi è stata completata o meno. voglio solo sapere che c'è qualche grande differenza tra questo? e questa soluzione funziona per il mio problema?

se esiste un altro modo, si prega di suggerirmi, grazie.

+1

Non capisco cosa stai cercando. Vuoi che il metodo sia SEMPRE chiamato? O vuoi essere in grado di invalidarlo in modo che non venga chiamato? Questo non è chiaro. – Oliver

+0

voglio solo sapere la differenza tra schedulerWithTimeInterval vs performselector con ritardo in profondità perché sto affrontando problemi con iOS 5.0. –

+0

E qual è questo problema? Ne parli nella tua domanda ma non è chiaro. – Oliver

risposta

21

Ecco le differenze

performSelectorWithObjectAfterDelay

  • come suggerisce il nome esegue un selettore, dopo un determinato numero di secondi. UNA VOLTA.

  • La cura che è necessario eseguire qui è che è necessario annullare qualsiasi richiesta di esecuzione precedente prima che l'oggetto su cui viene eseguito il selettore venga rilasciato. Per questo usa il metodo cancelPerformSelector.

scheduledTimerWithTimeInterval

  • questo metodo ti dà la possibilità di chiamare un selettore, dopo una durata specificata troppo, ma ha anche un parametro [ripete:] che consente di chiamare lo stesso selettore RIPETUTAMENTE

  • È anche possibile passare in chiamate per chiamare selettori, che sono particolarmente utili quando il selettore necessita di molti argomenti.

  • È necessario annullare il timer quando non è più necessario. Questo dovrebbe fare il trucco

    [myTimer invalidate]; myTimer = nil;

Anche questo è il thread più definitivo su NSTimer, si prega di dare un'occhiata a questo. How do I use NSTimer?

0

È possibile utilizzare performSelectorWithObjectAfterDelay e quindi cancelPerformSelector per interromperlo se non è più necessario. Penso che sia più facile di scheduledTimerWithTimeInterval dal momento che non è necessario memorizzare un riferimento al timer. Per la maggior parte questi due approcci dovrebbero comportarsi allo stesso modo.

+0

Non è necessario memorizzare il riferimento del timer. Una volta aggiunto al ciclo, è necessario il riferimento solo se si desidera annullarlo ... come cancelPerformSelector. Altrimenti, potresti creare un timer con un singolo sparo. – David

+0

La differenza principale è quando si desidera annullarlo, di cui il richiedente sembrava aver bisogno. In cancelPerformSelector hai solo bisogno del riferimento all'oggetto, al quale normalmente hai accesso (probabilmente è solo per te). Per cancellare un timer, è necessario aver memorizzato il timer da qualche parte, probabilmente come variabile di istanza. – zeroimpl