Se si vuole essere in grado di annullare il timer, si deve fare riferimento alla timer che stai cancellando, e questo significa che devi mantenere il puntatore sul timer in giro, vedere la risposta di Justin.
Mantenere un riferimento al timer è il modo giusto per farlo, ma per ragioni di completezza è possibile utilizzare anche il metodo -performSelector:withObject:afterDelay:
come timer di un uomo povero. La chiamata potrebbe essere invalidata utilizzando +cancelPreviousPerformRequestsWithTarget:
. Esempio di codice:
- (void) viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(timerTick) withObject:nil afterDelay:10];
}
E poi:
- (void) viewWillDisappear
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[super viewWillDisappear];
}
Ma questo non è il modo giusto per farlo, perché ci potrebbero essere altre richieste eseguire-selettore in attesa sul vostro oggetto che si sarebbe annullare. È meglio tenere il timer in giro, in questo modo sai esattamente cosa stai cancellando.
A proposito, è anche probabilmente una cattiva idea eseguire un timer in -viewDidLoad
. Visualizza il caricamento può accadere in qualsiasi momento, senza alcuna relazione alla visualizzazione visualizzata.
Cosa intendi per * Non voglio creare oggetto NSTimer *? Ne crei già uno usando 'scheduledTimerWithTimeInterval'. – sch
Intendo dire che non tengo il timer che creo. È possibile? – Voloda2