如何清除NSTimer内存?

时间:2016-02-18 07:30:42

标签: ios objective-c nstimer

我正在使用NSTimer在录制时在标签上显示秒数。 我点击录制按钮时启动计时器,并在点击停止按钮时停止计时器。 当我点击播放按钮时,计时器没有重新启动。

-(void)startTimer
{
 playTimer = [NSTimer scheduledTimerWithTimeInterval:1
                                             target:self
                                           selector:@selector(timerController)
                                           userInfo:nil
                                            repeats:YES];
}
- (NSString*)getTimeStr : (int) secondsElapsed
{
seconds = secondsElapsed % 60;
int minutes = secondsElapsed / 60;
int hours = secondsElapsed/3600;
return [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

- (void)timerController{
seconds++;
[[self timeLabel] setText:[self getTimeStr:(seconds)]];
}

- (IBAction)recordTapped:(id)sender {
[self startTimer];
}

- (IBAction)stopTapped:(id)sender {
 [playTimer invalidate];
  playTimer=nil;
 _timeLabel.text=@"00:00:00";
}

- (IBAction)playTapped:(id)sender {
[self startTimer];
}

2 个答案:

答案 0 :(得分:0)

- (void)resetTimer {
    if(playTimer) {
        [playTimer invalidate];
        playTimer = nil;
    }
}

您应该每次resetTimer再次调用startTimer方法。

答案 1 :(得分:0)

正如评论中所提到的,有两个错误:

错误#1

在重新启动计时器之前,您应该始终将变量seconds重置为0(可能会在startTimer的第1行重置它)

Bug#2

变量secondsgetTimeStr函数的第1行覆盖。您应该将seconds替换为int sec,将return行替换为seconds替换为sec