J'utilise une minuterie dans un thread, j'instancie la minuterie tout le temps mais quand je cours l'application dans l'instrument je vois la mémoire se développe exponentiellement, je n'ai aucune fuite. Je suis sûr que NSThread provoque la croissance? . J'arrête la minuterie actuelle avant d'en lancer une nouvelle (singleton) et je relâche tout dans stopTimer, mais je ne sais pas pourquoi la mémoire continue de croître?NSTimer dans la mémoire NSThread se développe?
- (void)startingTimer{
[view addSubview:timerBackground];
timerThread = [[NSThread alloc] initWithTarget:timer selector:@selector(startTimerThread) object:nil]; //Create a new thread
[timerThread start]; //start the thread
}
//the thread starts by sending this message
- (void) startTimerThread{
NSAutoreleasePool * timerNSPool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
isTimerRunning = YES;
nsTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startTime:) userInfo:nil repeats:YES];
[runLoop run];
[timerNSPool release];
}
- (void)startTime:(NSTimer *)theTimer{
if(timeDuration > 1){
--timeDuration;
//[self updateTextLbl];
[timer performSelectorOnMainThread:@selector(updateTextLbl) withObject:nil waitUntilDone:YES];
}else{
[timer stopTimer];
if(delegate)
[delegate timeIsUp];
}
}
- (void) stopTimer{
isTimerRunning = NO;
[nsTimer invalidate];
[timerThread release];
nsTimer = nil;
timerBackground.alpha = 0.0;
timerBackground.frame = CGRectMake(TIMER2_BG_X - TIMER2_BG_WIDTH, TIMER2_BG_Y, TIMER2_BG_WIDTH, TIMER2_BG_HEIGHT);
}
- (void)updateTextLbl{
timeLabel.text = [NSString stringWithFormat:@"%d",timeDuration];
}