如何清除 NSTimer 内存?

how to clear NSTimer memory?

我正在使用 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];
}
- (void)resetTimer {
    if(playTimer) {
        [playTimer invalidate];
        playTimer = nil;
    }
}

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

如评论中所述,存在两个错误:

错误 #1

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

错误 #2

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