2010-08-17 29 views
1

Si j'ai un NSTimer qui démarre dans viewdidload, où est l'endroit approprié pour l'invalider en quittant cette vue? Est-il également nécessaire de le relâcher?Invalidation d'un NSTimer?

+0

http://stackoverflow.com/questions/1171290/problems-in-nstimer-release-or-invalidate –

+0

Merci, question rapide si j'ai utilisé checkeventsTimer = [NSTimer scheduledTimerWithTimeInterval: 1 cible: self selector: @selector (checkEvents) userInfo: aucune répétition: YES]; Est-ce que cela signifie que je dois le libérer ou simplement l'invalider? – NextRev

Répondre

5

Si vous créez un temporisateur avec NSTimer scheduledTimerWithTimeInterval ... alors vous n'avez pas besoin de le libérer, car vous ne le possédez pas. Maintenant, chose importante est que la classe timer conserve la cible, et dans la plupart des cas, nous utilisons self comme cible. Si la minuterie n'est pas répétitive, une fois que le minuteur est terminé, il devient automatiquement invalide et la cible est libérée. Donc tu n'as rien à faire. Mais si votre minuterie est toujours en attente en quittant la vue (cela arrive si vous partez avant que le minuteur ne soit déclenché ou que le minuteur soit répétitif), vous devez l'invalider. L'endroit NE DOIT PAS être la méthode dealloc. Comme la minuterie elle-même conserve la cible, le dealloc ne sera pas appelé tant que la minuterie n'est pas valide.

Il est donc préférable d'invalider lorsque vous savez que vous n'avez plus besoin de cela. Cela peut être l'action qui passe à l'autre vue. Dites à l'utilisateur d'appuyer sur un bouton et, dans le gestionnaire de boutons, de passer à une autre vue. Vous pouvez invalider dans ce gestionnaire de bouton.

+1

Vous devez * toujours * invalider le temporisateur. Si vous définissez (par exemple) une minuterie de 10 secondes, l'utilisateur a suffisamment de temps pour quitter la vue avant que le minuteur ne se déclenche. Sinon, la réponse est surtout exacte. –

+0

c'est exactement ce que je veux dire par "cela se produit si vous partez avant que le minuteur ne soit déclenché". et invalider une minuterie qui est déjà invalide ne cause aucun problème. – taskinoor

+0

Je n'ai pas besoin d'invalider toujours le minuteur. Cela dépend de la situation. Pourquoi ai-je besoin de l'invalider si je suis sûr que l'utilisateur n'a rien à faire jusqu'à ce que le temporisateur non-répétitif soit déclenché. dire im permettant l'interaction de l'utilisateur après le déclenchement de la minuterie. dois-je encore l'invalider? Je sais que l'invalidation ne causera aucun problème, mais techniquement, je n'ai pas besoin de l'invalider. – taskinoor