2010-07-19 6 views
7

se ho creato un runloop del genere:come fermare un runloop attivato dal timer?

NSRunloop* loop = [NSRunloop currentRunLoop]; 
[runLoop addTimer:anyTimer forMode:NSDefaultRunLoopMode]; 

riesco a smettere di nuovo? o è l'unico modo per ignorare la notifica che utilizzo per attivare l'ulteriore azione?

ok, faccio un esempio per il problema:

-(void)blinkeffekt:(double)pollingTime{ 

NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 

if (pollingTime != 0) { 
    NSTimeInterval interval =(double)pollingTime/1000; 
    NSTimer timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(polling) userInfo:nil repeats:YES]; 
    [runLoop addTimer:timer forMode:NSDefaultRunLoopMode]; 
} 
else { 

    [timer invalidate]; 
} 

}

sicuramente, qui ci sono diversi errori - non c'è dubbio. ma penso, mostra il mio problema. e questo non è veramente risolvibile con le risposte fino ad ora.

Ho bisogno di eseguire un timer e fermarlo in seguito. e idealmente fuori da un'altra funzione della classe. ma poi non riesco più ad accedere al "timer" e runloop non permette di capire, se tale "messaggio" è disponibile. e sarebbe estremamente inefficace, se dovessi registrare per ogni chiamata della funzione un nuovo timer.

risposta

19

È necessario inviare un messaggio non valido al timer per rimuoverlo da RunLoop.

See Doc

[anyTimer invalidate]; 
+0

lì prima, ho dovuto legare il timer per l'oggetto, che io non perdere il riferimento. ma sì, così funziona – nico