代码之家  ›  专栏  ›  技术社区  ›  UdayM

如何清除NSTimer内存?

  •  1
  • UdayM  · 技术社区  · 9 年前

    我正在使用 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 回复  |  直到 9 年前
        1
  •  0
  •   Raptor    9 年前

    正如评论中提到的,有两个bug:

    错误#1

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

    错误#2

    变量 被第1行覆盖 getTimeStr 作用你应该更换 具有 int sec 以及 return 线路,更换 具有 sec .

        2
  •  0
  •   Hemang    9 年前
    - (void)resetTimer {
        if(playTimer) {
            [playTimer invalidate];
            playTimer = nil;
        }
    }
    

    你应该打电话 resetTimer 方法之前每次 startTimer 再一次