J'ai une classe avec une variable NSTimer *myTimer;
. À un moment donné que je fais:NSTimer ne s'arrête pas
myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES];
plus loin, j'ai une méthode:
- (void)doStuff
{
if(myTimer)
{
//do stuff
}
}
et j'arrêter mon chronomètre lorsque la classe est libérée par:
- (void)dealloc
{
if (myTimer) { //if myTimer==nil it already has been stopped in the same way
[myTimer invalidate];
myTimer = nil;
}
}
Maintenant, le problème est-ce que lorsque je relâche la classe, la minuterie s'allume encore et encore et déclenche l'événement de toute façon. Est-ce que je fais quelque chose de mal? Il semble que la méthode dealloc est jamais appelé, sinon myTimer serait nul et même si le sélecteur est tiré, il ne serait pas aller dans le if(myTimer)
Vous devriez donc nettoyer la minuterie avant de vous attendre à ce que l'objet disparaisse. –
@Joshua +1 c'est ce que j'ai dit ... vous devez "invalider" le timer pour obtenir votre objet 'released', ce qui peut finir par déclencher la méthode' dealloc' (juste pas en tant de mots) :) –