2010-07-19 6 views
7

si je mis en place un runloop comme ça:comment arrêter un cycle de démarrage déclenché par un temporisateur?

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

puis-je arrêter de nouveau? ou est le seul moyen d'ignorer la notification que j'utilise pour déclencher l'action supplémentaire?

ok, je donne un exemple du problème:

-(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]; 
} 

}

sûrement, voici quelques erreurs - pas question. mais je pense, cela montre mon problème. et ce n'est pas vraiment résolu avec les réponses jusqu'à maintenant.

Je dois lancer une minuterie et l'arrêter plus tard. et idéalement hors d'une autre fonction dans la classe. mais alors je ne peux plus accéder à "timer" et runloop ne permet pas de comprendre, si un tel "message" est disponible. et il serait extrêmement inefficace, si je devais enregistrer pour chaque appel de la fonction une nouvelle minuterie.

Répondre

19

Vous devez envoyer un message d'invalidation au temporisateur pour le retirer du RunLoop.

See Doc

[anyTimer invalidate]; 
il
+0

avant, je devais lier la minuterie à l'objet, que je ne lâche la référence. mais oui, alors ça marche – nico

Questions connexes